美文网首页
11.MySQL组合索引的有序性

11.MySQL组合索引的有序性

作者: 一枼落知天下 | 来源:发表于2019-07-09 20:13 被阅读0次

    组合索引的有序性和最左前缀原理
    【强制】理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c)

    假设有索引(A,B)
    mysql创建组合索引的规则是首先会对复合索引的最左边的,也就是第一个A字段的数据进行排序,在第一个字段的排序基础上,然后再对后面第二个的B字段进行排序。其实就相当于实现了类似 order by A B这样一种排序规则。
    第一个A字段是绝对有序的,而第二字段就是无序的了。所以通常情况下,直接使用第二个B字段进行条件判断是用不到索引的
    那么什么时候才能用到呢?
    当然是B字段的索引数据也是有序的情况下才能使用。
    什么时候才是有序的呢?
    只有在A字段是等值匹配的情况下,B才是有序的。

    组合索引查询的各种场景
    有 Index (A,B,C) ——组合索引多字段是有序的,并且是个完整的BTree 索引。

    下面条件可以用上该组合索引查询:

    A>5

    A=5 AND B>6

    A=5 AND B=6 AND C=7

    A=5 AND B IN (2,3) AND C>5

    下面条件将不能用上组合索引查询:

    B>5 ——查询条件不包含组合索引首列字段

    B=6 AND C=7 ——查询条件不包含组合索引首列字段

    下面条件将能用上部分组合索引查询:

    A>5 AND B=2 ——当范围查询使用第一列,查询条件仅仅能使用第一列

    A=5 AND B>6 AND C=2 ——范围查询使用第二列,查询条件仅仅能使用前二列

    组合索引排序的各种场景
    有组合索引 Index(A,B)。

    下面条件可以用上组合索引排序:

    ORDER BY A——首列排序

    A=5 ORDER BY B——第一列过滤后第二列排序

    ORDER BY A DESC, B DESC——注意,此时两列以相同顺序排序

    A>5 ORDER BY A——数据检索和排序都在第一列

    下面条件不能用上组合索引排序:

    ORDER BY B ——排序在索引的第二列

    A>5 ORDER BY B ——范围查询在第一列,排序在第二列

    A IN(1,2) ORDER BY B ——理由同上

    ORDER BY A ASC, B DESC ——注意,此时两列以不同顺序排序

    建议
    如果对有没有用上索引有疑惑可以写完sql以后 用explain 来运行一下sql
    可以更有利于理解sql的执行过程


    相关文章

      网友评论

          本文标题:11.MySQL组合索引的有序性

          本文链接:https://www.haomeiwen.com/subject/tawfkctx.html