一,pt-duplicate-key-checker

从CSDN上移过来的,已经不打算更新csdn了。

http://blog.csdn.net/mr_mablevi?viewmode=contents

前提:

下载地址:http://www.percona.com/redir/downloads/percona-toolkit/percona-toolkit-1.0.1.tar.gz

安装方法:perl Makefile.PL;make;make install

 

一:pt-duplicate-key-checker 使用

参考地址:http://www.percona.com/doc/percona-toolkit/pt-duplicate-key-checker.html

使用方法:

pt-duplicate-key-checker [OPTION...] [DSN]

使用说明:检查重复或多余的索引和外键,并打印出信息。
参数说明:加粗的为常用的。
--all-structs
结构(B树,哈希等)的索引,默认情况下是禁止的。因为BTREE索引可能会覆盖作为FULLTEXT索引的列,其实他们不是真正
的重复,因为是不同的索引结构。

--ask-pass
提示输入密码。
--charset

缩写-A,字符集设置:utf8,gbk,latin1 …

--[no]clustered

    主键和第二索引一起是重复的,默认开启。检测时的非主键索引的多列索引的后缀是一个主键最左边的前缀,则作为一个重复键。如:

PRIMARY KEY  (`a`)

KEY `b` (`b`,`a`)

SELECT ... WHERE b=1 ORDER BY a;

如果按照这个工具去掉b索引,则会出现filesort,他给的意见是 留下b(b)单列索引,把order by a去掉,因为他们的结果是一样的,a是主键。

--config
 读取该配置文件的列表。

--databases
只检查该列表中的数据库。

--defaults-file
缩写-F,读取Mysql的配置文件,需要绝对路径。

--engines
缩写-e,只检查该列表中指定的表的存储引擎。

--tables

缩写-t,只检查列表中指定的表。

--help
显示帮助

--host

缩写-h,连接到主机地址。

--ignore-databases

 跳过检查的某些数据库。

--ignore-engines
跳过检查的某些存储引擎。

--ignore-tables
 跳过检查某些表。

--ignore-order
加了这个参数会报: KEY(a,b)和 KEY(b,a) 是重复索引,默认关闭。

--key-types
检查索引的类型:f=foreignkeys, k=keys or fk=both,默认是fk。

--password
缩写-p,连接mysql时候的密码。

--user

缩写-u,连接mysql时候的用户

--pid
连接的PID

--port
缩写-P,连接时候的端口。

--socket
缩写-S,连接时候的套接字。

--[no]sql
打印出sql,如果有重复会答应出删除重复索引的sql。默认开启。

--[no]summary
打印出索引的统计信息。默认开启。

--verbose
缩写-v,打印出所有的索引信息,包括重复索引。

--version
打印版本信息。

 

 

列子说明:
create table a(id int primary key,name varchar(10),ageint);
1,create index idx_a on a(name);
2,create index idx_b on a(age);
3,create index idx_ab on a(name,age);--重复 和1
4,create index idx_p on a(age,id);   --重复和2
按理说只有2个重复的索引但是图出现了3个。


打印出了索引的统计信息,还有删除重复索引的sql。
为什么会把索引4都删除掉呢,原来是因为默认开启了--[no]clustered  参数。
去掉参数的话:显示2个。

 

删除掉1,2,4 索引,在建立
5,create index idx_ba on a(age,name);

执行:带 --ignore-order参数

 

其他的各种参数上面介绍的很清楚了,比如跳过库,存储引擎,表;或则只在某个库,存储引擎,表里面进行检查。可以自行测试。

posted @ 2012-09-28 16:25  jyzhou  阅读(1551)  评论(0编辑  收藏  举报