MySQL数据库——最左匹配原则

最左匹配原则的原因与索引B+树有一定关系,不清楚B+树的可以先了解一下MySQL索引——索引类型

内容

先说一下最左匹配原则以及相关的内容:

  1. 使用关联多列索引时,跳过左边的右边的全部失效
    例如:建立一个组合索引(a,b,c),写了查询条件where a = 1 and c = 3,索引a是最左边的,c是最右边的,而这里只写了a和c的条件,跳过了b,那b右边的c虽然写了条件c=3但是查询的时候也用不上

  2. 范围条件右边失效
    例如:建立一个组合索引(a,b,c),写了查询条件where a = 1 and b > 2 and c = 3,b是个范围条件,那么索引智能用到a和b,c是范围条件右边的内容,索引用不到
    注意:a = 1 and b > 2 and c = 3a = 1 and c = 3 and b > 2是一样的,a、b、c的顺序不是写sql条件时的顺序,而是建立索引时的顺序

  3. 模糊查询like '%'在左边时失效
    例如:条件where name like '%a',这里name这个索引时用不上的

原因

  1. 在建立组合B+树索引(a,b,c)时,会先根据a来排序,在a相同时再根据b数据来排序,a和b的值都相同才按c排序。看内容的第一条a = 1 and c = 3,数据库会根据索引找到a=1,但要找c=3,要扫描所有a=1的数据,因为只有a和b的值都相同时才会对c排序,只有排序的数据才能用上索引,而跳过b,对于a在说c的值就是乱序的没有经过排序。所以c的索引不会被用上,b的条件都没有被写上去当然也用不上,这里只有索引a有效

  2. 内容中的2原因也类似,c对于a = 1 and b > 2来说是乱序的。乱序不能被索引的原因和乱序不能用二分法查找类似

  3. 内容中的第3条,是因为字符串排序是根据一个一个字符来的,先按第一个字符排序,第一个字符相同的再按第二个字符排序,以此类推。知道了排序规则后再结合上面的解释就很容易理解了,可以把一个字符串看做一个组合索引,a是第一个字符,b是第二个字符,c是第三个字符,只有确定前面的值才能索引

注意
内容1、2条中,条件只能用and,不能or,比如a = 1 or b = 2可以把它看做是两个条件,a = 1b = 2,查找时a = 1是能用上索引但查找b = 2是不能用上索引的,总体还是用不上索引
也不能用 != 作为条件

你可能感兴趣的:(MySQL数据库——最左匹配原则)