如何选择合适的列建立索引?
1,where,group by,order by,on 中出现的列;
2,索引字段越小越好;
3,离散度大的列放在联合索引的前面;
select * from payment where staff_id = 2 and customer_id = 584;
应该使用 index(customer_id, staff_id) 而不是index(staff_id, customer_id),因为 customer_id 的离散度更大;
索引优化 SQL:
去除重复的索引(重复的索引影响效率);
去除冗余索引(冗余的索引音响効率),冗余索引指的是多个索引的前缀列相同,或是在联合索引中包含了主键的索引,例如 key(name, id);
使用 pt-duplicate-key-checker 工具(也是使用 Percona 的工具集,要先安装好 DBD:mysql ,考虑到以后都是在 linux 环境下安装使用的,这里就不在 Windows 下安装了,待需要的时候再补充)检查重复及冗余索引,
命令(window 下)为:perl C:pt-duplicate-key-checker.pl -u xx -p ‘xx’ -h mysql 所在的 ip;
去除不再使用的索引(不再使用的索引影响效率):也使用 percona 的工具,perl C:pt-index-usage.pl -u xx -p 'xx' xxx-slow.log;
浙公网安备 33010602011771号