MySQL死活不走索引终极大解密(看完想杀人)

今天运维小窗我,说我们的SQL查询太慢,几乎所有查询都是全表扫描,占用了机器大部分资源,严重影响了其他应用的性能。

听到这种话,有技术洁癖的我哪能忍受如此奇耻大辱。我拍桌怒吼,十分钟给你解决(╯—﹏—)╯(┷━━━┷

 

第一步,先看表建索引了没。关键字段都有,而且是组合索引,没问题( •̀_•́ )

 

第二步,再看SQL用的对不对。都是用的索引字段,条件中没有什么or啊,IS NULL判断啊什么的,而且遵循的"最左匹配原则",没道理不走索引的

 

第三步,祭出EXPLAIN。结果是,除了用主键查询的走了主键索引外,其他一律都没走索引,组合索引的N种组合全试过了

 

第四步,十分钟之期已过。男子汉大丈夫,一言既出,驷马难追。一言不合我就删库走人(╯—﹏—)╯(┷━━━┷

 

第五步,等一下,在删库之前,我还是想确认一遍,是不是真的建立索引了。一条命令敲出去

SHOW KEYS FROM balabala;

结果我们的索引是长这样的:

一眼看上去,的确是建了索引的。

再看最后一眼吧,咦,disable是什么鬼?

查一下,这些字段都是什么含义

看完我就想杀人了,喵的,这是索引被关闭的意思

请帮我问候一下关闭这个索引的人的麻麻(╯—﹏—)╯(┷━━━┷

 

解决办法:

关闭:ALTER TABLE `test` DISABLE KEYS ;
开启:ALTER TABLE `test` ENABLE KEYS;

 

今天真够惊心动魄的,不过工作总算是保住了,窃喜๑乛◡乛๑

你可能感兴趣的:(爬坑指南)