结合B+树,谈数据库的联合索引

本文通过解析B+树结构,探讨了数据库联合索引的工作原理,尤其是最左原则。举例说明了在不同查询条件下,如何使用联合索引以提高查询效率。联合索引的构建方式是按照索引列的顺序排列,因此,对于非最左列的查询,索引可能无法完全利用,导致全表扫描或部分索引使用。
摘要由CSDN通过智能技术生成

先给一个问题:
数据库表T有A,B,C三个字段,对其建立联合索引uniq(A,B,C),请问如下查询哪些会用到索引?
1. SELECT * FROM T WHERE A=a AND B=b AND C=c;
2. SELECT * FROM T WHERE A=a AND B=b;
3. SELECT * FROM T WHERE A=a AND C=c;
4. SELECT * FROM T WHERE B=b AND C=c;

大家都知道联合索引有最左原则。也就是说,如果联合索引的第一个列没有在WHERE语句中,或者所查询的列其中并没有在索引中被建立。那么,这个联合索引是无效的。
比如,上面的问题,这个索引可以被用于搜索如下所示的数据列组合:
A,B,C
A,B
A

MySQL不能利用这个索引来搜索没有包含在最左前缀的内容。例如,如果你按照B或C来搜索,就不会使用到这个索引。
如果你搜索给定的A和C的组合,该索引也是不能用于这种组合值的,尽管MySQL可以利用索引来查找匹配的A从而缩小搜索的范围。

那么,为什么是最左原则呢?
就要想想联合查询的结构是怎样的。

首先,先看看B+树的结构图。
这里写图片描述
(图源张洋的《MySQL索引背后的数据结构及算法原理》一文)

那联合索引呢&#x

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值