【慕课网_性能优化之MySQL优化_学习】【09】
索引的维护及优化 --- 重复及冗余索引
重复索引: 相同的列以相同的顺序建立同类型的索引
CREATE TABLE test (
id INT NOT NULL PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
title VARCHAR(50) NOT NULL,
UNIQUE(id)
)ENGINE = INNODB;
本来id就是主键了是唯一索引了,又在id上建了一个唯一索引
冗余索引: 多个索引的前缀列相同, 或是在联合索引中包含了主键索引
CREATE TABLE test (
id INT NOT NULL PRIMARY KEY,
NAME VARCHAR(20) NOT NULL,
title VARCHAR(50) NOT NULL,
KEY(NAME,id)
)ENGINE = INNODB;
查找重复索引和冗余索引
USE information_schema;
SELECT
a.TABLE_SCHEMA AS '数据名', a.TABLE_NAME AS '表名', a.INDEX_NAME AS '索引1', b.INDEX_NAME AS '索引2', a.COLUMN_NAME AS '重复列名'
FROM
STATISTICS a
JOIN STATISTICS b
ON a.TABLE_SCHEMA = b.TABLE_SCHEMA
AND a.TABLE_NAME = b.TABLE_NAME
AND a.SEQ_IN_INDEX = b.SEQ_IN_INDEX
AND a.COLUMN_NAME = b.COLUMN_NAME
WHERE a.SEQ_IN_INDEX = 1
AND a.INDEX_NAME <> b.INDEX_NAME
工具: pt_duplicate_key_checker
删除不用的索引:
通过慢查询日志 + pt-index-usage进行分析索引的使用情况
工具: percona-toolkit