关于mysql组合索引的最左匹配原则很多人都理解都是不正确的,那接下来就带你正确的认识它。

为何要使用组合索引呢

  • 效率高,减少查询开销,索引列越多,通过索引筛选出的数据越少
  • 覆盖索引,MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操做

    最左匹配原则是什么

    顾名思义,就是最左优先,在创建组合索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
    复合索引很重要的问题是如何安排列的顺序,比如where后面用到c1, c2 这两个字段,那么索引的顺序是(c1,c2)还是(c2,c1)呢,正确的做法是,重复值越少的越放前面,比如一个列 95%的值都不重复,那么一般可以将这个列放最前面。另外,复合索引的字段数尽量不要超过 3个,一旦超过,要慎重考虑必要性。 :::info 注意:当遇到范围查询(>、<、between、like)就会停止匹配。 :::

    场景示例

    ```java 建立一个组合索引 index(a,b,c)

where a=3 只使用了a where a=3 and b=5 使用了a,b where a=3 and b=5 and c=4 使用了a,b,c where b=3 or where c=4 没有使用索引 where a=3 and c=4 仅使用了a where a=3 and b>10 and c=7 使用了a,b where a=3 and b like ‘xx%’ and c=7 使用了a,b ```