复合索引的正确理解

复合索引的结构

参考《MySQL技术内幕:InnoDB存储引擎 第2版》复合索引的结构
首先正确的认识复合索引的结构,非叶子节点上是存在索引值的
例如以a、b字段建立复合索引,那排列如下
复合索引的正确理解_第1张图片
通过叶子节点,就能拿到数据(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 不使用索引
复合索引的正确理解_第2张图片
case3 使用两个索引,range范围查询和非范围查询
复合索引的正确理解_第3张图片

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

此外还有索引运用于排序的case,可以参照引用的博客进行学习

你可能感兴趣的:(复合索引的正确理解)