复合索引的正确理解

复合索引的结构

参考《MySQL技术内幕:InnoDB存储引擎 第2版》复合索引的结构
首先正确的认识复合索引的结构,非叶子节点上是存在索引值的
例如以a、b字段建立复合索引,那排列如下
在这里插入图片描述
通过叶子节点,就能拿到数据(1,1)、(1,2)、(2,1)、(2,4)、(3,1)、(3,2)

索引使用数量

参考 https://www.cnblogs.com/cyhbyw/p/8845937.html
对于c1、c2、c3、c4建立复合索引

DROP TABLE IF EXISTS test03;
CREATE TABLE test03 (
    id INT PRIMARY KEY auto_increment,
    c1 char(10),
    c2 char(10),
    c3 char(10),
    c4 char(10),
    c5 char(10)
);
CREATE INDEX idx_c1234 ON test03(c1, c2, c3, c4);

case1 使用一个索引
在这里插入图片描述
case2 不使用索引
在这里插入图片描述
case3 使用两个索引,range范围查询和非范围查询
在这里插入图片描述

case4 这是面试被考到的情况
分析:使用索引还是两个,c1c2。 数据库先通过c1定位到 c1 = 'a1’的节点(结合上面的b+树),通过c2定位到 c2 = 'a1’的节点,对该大于节点的区间进行访问。可见c3这个索引没有使用。
在这里插入图片描述

此外还有索引运用于排序的case,可以参照引用的博客进行学习
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值