过多的索引不但会影响写入效率也会影响查询效率。mysql
重复索引sql
重复索引是指相同的列以相同的顺序创建的同类型的索引,以下表中primary key和ID列上的索引就是重复索引。
工具
create tables test(优化
id int not null primary key,
spa
name varchar(50) not null,
日志
title varchar(50) not nll.
索引
unique(id)
it
)engine = innodb; //主键已是惟一索引了innodb
冗余索引是指多个索引的前缀列相同或是在联合索引中包含了主键的索引,下面例子中key(name,id)就是一个冗余索引
mariadb
create table test(
id int not null primary key/
name varchar(10) not null.
title varchar(50) not null,
key(name,id)
)engine=innodb;
对于innodb来讲每个索引后面实际上都会包含主键。在创建一个联合索引人为的把索引包含进去,这时就是一个冗余索引。
工具 pt-duplicate-key-checker
用法 pt-duplicate-key-checker -uroot -p****** -h127.0.0.1
能够查看重复索引,冗余索引,而且给出了一个优化的建议,应用更加方便有效。
删除再也不使用的索引
目前mysql中尚未记录索引的使用状况,可是在perconmysql和mariadb中能够经过INDEX_STATISTICE表来查看哪些索引未使用,但在mysql中目前只能经过慢查日志配合pt_index_usage工具来进行索引使用状况的分析。
pt-index-usage \ -uroot -p****** \ mysql-slow.log