1. 什么是索引?
在数据库中,索引就像书本的目录一样,用来加速数据的查找。
比如,你要查一本书的“第12章”,你会先看目录,然后直接跳到第12章,而不是一页一页翻。这大大提高了查询的效率。
数据库也是类似的,当你查询某个数据时,索引会帮你快速定位到目标数据。
2. 复合索引是什么?
复合索引(也叫组合索引)是数据库中包含多个列的索引,比如(A, B, C)
。
这就像一本书的目录有多个分类,比如:
章(一级目录) 节(二级目录) 小节(三级目录)
复合索引的作用:可以加快多个列联合查询的速度。
3. 什么是最左原则?
最左原则是针对复合索引的查询规则,它决定了查询时能否有效地使用索引。简单理解就是:
- “从左到右”依次匹配复合索引的列
。 只有满足“最左边的列”的条件时,索引才能生效。 - 一旦跳过某个列,后面的列索引就无法使用了
4. 最左原则的例子
假设我们有一个复合索引(A, B, C)
,我们可以理解为:
A是最左边的第一列 B是第二列 C是第三列
查询时,索引的使用规则如下:
WHERE A = ? | A,索引生效。 | |
WHERE A = ? AND B = ? | A和 B,索引生效。 | |
WHERE A = ? AND B = ? AND C = ? | A、 B和 C,索引生效。 | |
WHERE B = ? | A,索引失效。 | |
WHERE C = ? | A和 B,索引失效。 | |
WHERE A = ? AND C = ? | A,但是跳过了 B,索引在 A部分生效, C部分不生效。 |
5. 为什么最左原则存在?
复合索引(A, B, C)
在底层存储时,是按顺序排列的,就像下面这样:
A 列 B 列 C 列---------------------1 1 11 1 21 2 12 1 12 2 1...
索引的排列顺序总是先按照A
列排序,然后在A
相同的情况下按照B
排序,最后按照C
排序。
所以,查询时必须从左到右依次匹配列,这样数据库才能高效地找到目标数据。
6. 形象比喻
假设你在图书馆找一本书:
书架是按“楼层 →书架编号 →书名” 排列的。 这三者分别对应 (A, B, C)
。
如果你想找到某本书:
- 按楼层找(A)
:你先确定在哪一层楼。 - 按书架编号找(B)
:到了楼层后,你进一步找某个书架。 - 按书名找(C)
:最后,你在书架上找到具体的书名。
如果你不指定楼层(A
),直接找书架(B
),就会很难找,因为楼层太多了,索引失效。
7. 最左原则的优化建议
在设计查询语句时,为了充分利用复合索引,应遵循以下原则:
- 尽量在查询条件中包含最左列(索引的第一个列)
。 如索引 (A, B, C)
,查询条件至少要包含A
。
- 避免跳过索引列
。 比如查询时不要只查询 B
或C
,否则索引会失效。
- 顺序要与索引一致
。 WHERE A = ? AND B = ?比 WHERE B = ? AND A = ?
更高效。
- 考虑是否需要多列索引
。 如果查询经常只用 A
和B
,而很少用C
,可以创建(A, B)
的索引,而不是(A, B, C)
。
8. 总结
最左原则简单来说就是:复合索引必须从最左边开始匹配,不能跳过中间的列。
- 复合索引
(A, B, C): 正确的使用: WHERE A = ?
、WHERE A = ? AND B = ?
。错误的使用: WHERE B = ?
、WHERE C = ?
。
在写 SQL 查询语句时,遵循最左原则可以让数据库有效地利用索引,提高查询效率。
希望这个解释通俗易懂,让你一目了然! 😊
文章转载自解压泡泡糖,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




