今天运维小窗我,说我们的SQL查询太慢,几乎所有查询都是全表扫描,占用了机器大部分资源,严重影响了其他应用的性能。
听到这种话,有技术洁癖的我哪能忍受如此奇耻大辱。我拍桌怒吼,十分钟给你解决(╯—﹏—)╯(┷━━━┷
第一步,先看表建索引了没。关键字段都有,而且是组合索引,没问题( •̀_•́ )
第二步,再看SQL用的对不对。都是用的索引字段,条件中没有什么or啊,IS NULL判断啊什么的,而且遵循的"最左匹配原则",没道理不走索引的
第三步,祭出EXPLAIN。结果是,除了用主键查询的走了主键索引外,其他一律都没走索引,组合索引的N种组合全试过了
第四步,十分钟之期已过。男子汉大丈夫,一言既出,驷马难追。一言不合我就删库走人(╯—﹏—)╯(┷━━━┷
第五步,等一下,在删库之前,我还是想确认一遍,是不是真的建立索引了。一条命令敲出去
SHOW KEYS FROM balabala;
结果我们的索引是长这样的:
一眼看上去,的确是建了索引的。
再看最后一眼吧,咦,disable是什么鬼?
查一下,这些字段都是什么含义
看完我就想杀人了,喵的,这是索引被关闭的意思
请帮我问候一下关闭这个索引的人的麻麻(╯—﹏—)╯(┷━━━┷
解决办法:
关闭:ALTER TABLE `test` DISABLE KEYS ;
开启:ALTER TABLE `test` ENABLE KEYS;
今天真够惊心动魄的,不过工作总算是保住了,窃喜๑乛◡乛๑