您的位置:首页 > 其它

percona-toos 学习:一,pt-duplicate-key-checker

2011-11-18 22:36 549 查看
前提:

下载地址: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参数



其他的各种参数上面介绍的很清楚了,比如跳过库,存储引擎,表;或则只在某个库,存储引擎,表里面进行检查。可以自行测试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: