mysql索引优化实战

2019-07-24  本文已影响0人  Jason大圣

最近看了一些索引优化方面的资料,大多数内容都是互相抄袭,有的甚至根本讲不到点上。在此记录下我遇到的几个问题。

误区:最左匹配原则,where语句必须和索引字段顺序保持一致。

例如表user有一个索引index(`name`,`age`,`sex`)。那么,select * from user where age = 1 and name = 'test'仍然会命中这个索引。也就是说,where条件的顺序和索引顺序无关,只需要where语句中存在索引最左列字段,即可命中该索引。

问题:明明where语句写的很规范,符合索引要求,却没有命中索引。

示例:select a.* from user a inner join score b on a.stu_id = b.stu_id where a.name='test' and a.age = 20 order by a.id desc;

经分析未命中索引,原来是因为order by搞的鬼。这种情况,需要先对order by语句建立索引。需要将索引修改成index(`id`,`name`,`age`,`sex`)。

若遇到order by a.id desc,b.score asc这种,导致仍然未命中索引,需要在select语句上加上强制索引。

如:select a.* from user a force index(`index`) inner join score b on a.stu_id = b.stu_id where a.name='test' and a.age = 20 order by a.id desc;

上一篇 下一篇

猜你喜欢

热点阅读