欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL优化-索引

程序员文章站 2022-03-08 17:41:22
...

查看数据库索引使用的情况

show status like 'Handler_read%'

MySQL优化-索引

Handler_read_key:这个值越高越好,越高表时使用索引查询到的次数。

Handler/-read/-rnd_next:这个值越高,说明查询低效。


四种索引(主键索引/唯一索引/全文索引/普通索引)

为什么创建索引后,速度会变快?

二叉树算法

1.添加索引

1.1主键索引添加

当一张表,吧某一列设为主键的时候,则该列就是主键索引

create table aaa(

id int unsigned primary key auto_increment,

name varchar(32) not null default'');

这里id列就是主键索引

当你创建表时,没有指定主键索引,也可以再创建表后,再添加,指令:

alter table 表名 add primary key(列名);

举例:

create table bbb(
id int,
name varchar(32) not null default '');
alter table bbb add primary key (id);

1.2普通索引

一般来说,普通索引的创建,是先创建表,然后在创建普通索引

比如:

create table ccc(
id int unsigned,
name vrchar(32));
create index 索引名 on 表(列)

1.3全文索引

全文索引,主要是针对对文件,文本的检索,比如文章。

全文索引仅针对(MyISAM有用),且仅对英文生效(可通过sphinx(coreseek)技术处理中文)

create table articles(
id int unsigned auto_increment not null primary key,
title varchar(200),
body text,
fulltext(title,body)
)engine=myisam charset utf8;

如何使用全文索引:

错误用法:select * from articles where body like '%mysql%';【不会使用全文索引】

证明:explain select * from articles where body like '%mysql%';

MySQL优化-索引

正确用法:

select * from articles where match(title,body) against('dataBase');【可以】

MySQL优化-索引

select match(title,body) against('dataBase') from articles;查看每条记录与关键词的匹配度

1.4唯一索引

当表的某列被指定为unique约束时,这列就是一个唯一索引

create table ddd(

id int primary key auto_increment,

name varchar(32) unique);

这时,name列就是一个唯一索引

create unique index 索引名 on 表名(列名)

unique字段可以为NULL且能有多个,但是如果是具体内容,则不能重复

主键字段不能为NULL,也不能重复

也可以在表创建后,通过如下语句创建唯一索引

create table eee(
id int primary key auto_increment,
name varchar(32));

create unique index 索引名 on 表名(列名)

alter table 表名 add unique 列名

2.查询索引

desc 表名 【该方法的缺点是 不能够显示索引名】
show index[es] from 表名 [/G]
show keys from 表名

3.删除索引

alter table 表名 drop index 索引名;

alter table 表名 drop primary key

4.修改

先删除,再重新创建