美文网首页
MySQL最左前缀原则

MySQL最左前缀原则

作者: 九点四十 | 来源:发表于2018-01-13 20:24 被阅读0次

通过实例理解单列索引、多列索引以及最左前缀原则

实例:现在我们想查出满足以下条件的用户id:

mysql>SELECT `uid` FROM people WHERE lname`=’Liu’  AND `fname`=’Zhiqun’ AND `age`=26

因为我们不想扫描整表,故考虑用索引。

单列索引:

ALTER TABLE people ADD INDEX lname (lname);

将lname列建索引,这样就把范围限制在lname=’Liu’的结果集1上,之后扫描结果集1,产生满足fname=’Zhiqun’的结果集2,再扫描结果集2,找到 age=26的结果集3,即最终结果。

由 于建立了lname列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。虽然我们可以删除lname列上的索引,再创建fname或者age 列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。

2.多列索引:

ALTER TABLE people ADD INDEX lname_fname_age (lame,fname,age);

为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。

注:在mysql中执行查询时,只能使用一个索引,如果我们在lname,fname,age上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。

3.最左前缀:顾名思义,就是最左优先,上例中我们创建了lname_fname_age多列索引,相当于创建了(lname)单列索引,(lname,fname)组合索引以及(lname,fname,age)组合索引。

注:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

拓展:在网上看到一个关于最左前缀原则提出这么一个例子。

多列字段做索引,state/city/zipCode,想要索引生效的话,只能使用如下的组合

state/city/zipCode

state/city

state

其他方式(如city,city/zipCode),则索引不会生效

这种现象是怎么导致的?和索引的存储方式有关吗?

本人页参考了下其他网友的观点,个人认为,所谓最左前缀原则就是先要看第一列,在第一列满足的条件下再看左边第二列,以此类推。有位网友描述得很形象:

你可以认为联合索引是闯关游戏的设计

例如你这个联合索引是state/city/zipCode

那么state就是第一关 city是第二关, zipCode就是第三关

你必须匹配了第一关,才能匹配第二关,匹配了第一关和第二关,才能匹配第三关

你不能直接到第二关的

索引的格式就是第一层是state,第二层才是city

索引是因为B+树结构  所以查找快  如果单看第三列  是非排序的。

多列索引是先按照第一列进行排序,然后在第一列排好序的基础上再对第二列排序,如果没有第一列的话,直接访问第二列,那第二列肯定是无序的,直接访问后面的列就用不到索引了

sql优化

http://blog.csdn.net/zly9923218/article/details/51007554

相关文章

  • 我去,为什么最左前缀原则失效了?

    问题 最近,在 mysql 测试最左前缀原则,发现了匪夷所思的事情。根据最左前缀原则,本来应该索引失效,走全表扫描...

  • 索引

    这道题目考察的知识点是MySQL组合索引(复合索引)的最左优先原则。 最左前缀匹配原则 在mysql建立联合索引时...

  • MySQL 最左前缀原则

    假设数据 表 T (a,b,c) rowid 为物理位置 当你创建一个索引 create index xxx on...

  • MySQL最左前缀原则

    通过实例理解单列索引、多列索引以及最左前缀原则 实例:现在我们想查出满足以下条件的用户id: mysql>SELE...

  • Mysql 联合索引最左原则

    在最左匹配原则中,有如下说明: 1、最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>...

  • Mysql索引失效

    mysql 索引失效的原因有哪些?Mysql索引失效的原因 1、最佳左前缀原则——如果索引了多列,要遵守最左前缀原...

  • MySQL建索引、查询优化

    索引 最左前缀匹配原则非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)...

  • MySQl 索引入门

    什么是 最左前缀原则

  • mysql索引的原则

    1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)...

  • Mysql语句优化的原则——让你写sql更加顺手

    使用索引的原则: 1.最左前缀匹配原则。 mysql会一直向右匹配直到遇到范围查询(>、<、between、lik...

网友评论

      本文标题:MySQL最左前缀原则

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