暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库优化中的“最左原则”:你所不知道的查询性能杀手!

解压泡泡糖 2024-12-11
83

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)
在底层存储时,是按顺序排列的,就像下面这样:

    AB 列 C 列 
    ---------------------
    1 1 1
    1 1 2
    1 2 1
    2 1 1
    2 2 1
    ...

    索引的排列顺序总是先按照A
    列排序,然后在A
    相同的情况下按照B
    排序,最后按照C
    排序。

    所以,查询时必须从左到右依次匹配列,这样数据库才能高效地找到目标数据。



    6. 形象比喻

    假设你在图书馆找一本书:

    • 书架是按“楼层书架编号书名” 排列的。
    • 这三者分别对应(A, B, C)

    如果你想找到某本书:

    • 按楼层找(A)
      :你先确定在哪一层楼。
    • 按书架编号找(B)
      :到了楼层后,你进一步找某个书架。
    • 按书名找(C)
      :最后,你在书架上找到具体的书名。

    如果你不指定楼层A
    ),直接找书架(B
    ),就会很难找,因为楼层太多了,索引失效。



    7. 最左原则的优化建议

    在设计查询语句时,为了充分利用复合索引,应遵循以下原则:

    1. 尽量在查询条件中包含最左列(索引的第一个列)
      • 如索引(A, B, C)
        ,查询条件至少要包含A
    2. 避免跳过索引列
      • 比如查询时不要只查询B
        C
        ,否则索引会失效。
    3. 顺序要与索引一致
      • WHERE A = ? AND B = ?
        WHERE B = ? AND A = ?
        更高效。
    4. 考虑是否需要多列索引
      • 如果查询经常只用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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论