联合索引(多列索引)[通俗易懂]

联合索引(多列索引)[通俗易懂]联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.最左匹配原则假定上图联合索引的为(a,b)。联合索引也是一棵B+树,不同的是B+树在对索引a排序的基础上,对索引b排序。所以数据按照(1,1),(1,2)……顺序排放。对于selete*fromtablewherea=XXandb=XX,显然是可以使用…

大家好,又见面了,我是你们的朋友全栈君。

联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.

最左匹配原则

联合索引(多列索引)[通俗易懂]

假定上图联合索引的为(a,b)。联合索引也是一棵B+树,不同的是B+树在对索引a排序的基础上,对索引b排序。所以数据按照(1,1),(1,2)……顺序排放。

对于selete * from table where a=XX and b=XX,显然是可以使用(a,b)联合索引的,

对于selete * from table where a=XX,也是可以使用(a,b)联合索引的。因为在这两种情况下,叶子节点中的数据都是有序的。

但是,对于b列的查询,selete * from table where b=XX。则不可以使用这棵B+树索引。可以发现叶子节点的b值为1,2,1,4,1,2。显然不是有序的,因此不能使用(a,b)联合索引。

By the way:selete * from table where b=XX and a=XX,也是可以使用到联合索引的,你可能会有疑问,这条语句并不符合最左匹配原则。这是由于查询优化器的存在,mysql查询优化器会判断纠正这条sql语句该以什么样的顺序执行效率最高,最后才生成真正的执行计划。所以,当然是我们能尽量的利用到索引时的查询顺序效率最高咯,所以mysql查询优化器会最终以这种顺序进行查询执行。

优化:在联合索引中将选择性最高的列放在索引最前面。

例如:在一个公司里以age 和gender为索引,显然age要放在前面,因为性别就两种选择男或女,选择性不如age。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/136186.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OutOfMemoryError系列(1): Java heap space

    OutOfMemoryError系列(1): Java heap space本文通过实例来分析java.lang.OutOfMemoryError:Javaheapspace问题产生的原因,以及相关的解决方案

    2022年7月7日
    22
  • 惯性矩阵计算

    惯性矩阵计算

    2022年6月28日
    26
  • 【知识小结】PHP使用svn笔记总结

    【知识小结】PHP使用svn笔记总结

    2021年10月22日
    48
  • linux添加路由提示不允许的操作_Linux修改默认路由

    linux添加路由提示不允许的操作_Linux修改默认路由1、linux添加路由、查看路由状态、删除路由如下添加路由:routeadd-net192.168.1.44netmask255.255.255.0gw192.168.1.1查看路由状态:route-n删除路由:routedel-net192.168.20.0netmask255.255.255.02、如果想让重启也生效,可以把添加路由命令写在/etc/rc.local中,即可vi/etc/rc.local在最后加下如下routeadd-net192.1

    2022年9月1日
    4
  • PHP工厂模式的好处

    PHP工厂模式的好处 顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解 一般我们实例化一个类会给它一些参数以便在其构析的时候可以根据不同的参数反馈出我们需要的结果。举例说明,以下是一个User类,非常简单:01.02.      03.    int

    2022年7月25日
    12
  • noip宝藏_24日拼图寻宝

    noip宝藏_24日拼图寻宝题目描述:点击打开链接/*思路:可以看成是一个多层的约瑟夫环问题*/#include#defineN10005#defineM105intstairs[N][M];//是否有楼梯口(0/1)intsign[N][M];//房间指示牌(走的步数)intf[N];//每层楼梯口总数(记录每层楼梯口数

    2022年8月22日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号