美文网首页
mysql索引优化实战

mysql索引优化实战

作者: Jason大圣 | 来源:发表于2019-07-24 21:39 被阅读0次

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

    误区:最左匹配原则,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;

    相关文章

      网友评论

          本文标题:mysql索引优化实战

          本文链接:https://www.haomeiwen.com/subject/tskzkctx.html