由于个人能力有限,文中可能存在错误,欢迎批评指正。
文章目录
1.说明
pt-duplicate-key-checker 用于检查冗余索引及优化,pt 工具下载。
在 MySQL 5.6 或更高版本,可以直接在 sys 库中查询 schema_redundant_indexes 表,也能获取到冗余索引信息,如下所示:
mysql> select * from sys.schema_redundant_indexes\G
*************************** 1. row ***************************
table_schema: dbtest01
table_name: t3
redundant_index_name: idx_xx
redundant_index_columns: xxx
redundant_index_non_unique: 1
dominant_index_name: idx_uniq
dominant_index_columns: xxx,yyy,zzz
dominant_index_non_unique: 0
subpart_exists: 0
sql_drop_index: ALTER TABLE `dbtest01`.`t3` DROP INDEX `idx_xx`
*************************** 2. row ***************************
table_schema: dbtest01
table_name: ttt
redundant_index_name: name
redundant_index_columns: name
redundant_index_non_unique: 1
dominant_index_name: xxx
dominant_index_columns: name,age
dominant_index_non_unique: 1
subpart_exists: 0
sql_drop_index: ALTER TABLE `dbtest01`.`ttt` DROP INDEX `name`
2 rows in set (0.01 sec)
2. pt 工具使用
[mysql@dbtestsitdb01 bin]$ ./pt-duplicate-key-checker -uroot -p‘123456’ -h127.1 --socket=/mysql/data/mysql.sock -d dbtest01
# ########################################################################
# dbtest01.t3
# ########################################################################
# idx_xx is a left-prefix of idx_uniq
# Key definitions:
# KEY `idx_xx` (`xxx`) USING BTREE,
# UNIQUE KEY `idx_uniq` (`xxx`,`yyy`,`zzz`),
# Column types:
# `xxx` varchar(20) not null
# `yyy` varchar(20) not null
# `zzz` varchar(20) not null
# To remove this duplicate index, execute:
ALTER TABLE `dbtest01`.`t3` DROP INDEX `idx_xx`;
# ########################################################################
# dbtest01.ttt
# ########################################################################
# name is a left-prefix of xxx
# Key definitions:
# KEY `name` (`name`),
# KEY `xxx` (`name`,`age`)
# Column types:
# `name` varchar(20) default null
# `age` varchar(10) default null
# To remove this duplicate index, execute:
ALTER TABLE `dbtest01`.`ttt` DROP INDEX `name`;
# ########################################################################
# Summary of indexes
# ########################################################################
# Size Duplicate Indexes 741
# Total Duplicate Indexes 2
# Total Indexes 79
由上述检查信息中,我们可以看到,表 t3 、ttt 中存在冗余索引,并且给出对应可以删除重复索引的 SQL 命令。
结尾的统计信息:
- Size Duplicate Indexes,检查的索引占用空间大小
- Total Duplicate Indexes,检查的冗余索引数量
- Total Indexes,检查的总的索引数量