复合索引的结构
参考《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这个索引没有使用。