過多的索引不但會影響寫入效率也會影響查詢效率。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