Mysql 索引最左匹配原则

假设建立这样一个联合索引
KEYidx(name, age, postion) USING BTREE


  • 索引的本质是帮助MYSQL高效获取数据的排好序数据结构(一般都是B树)从左到右依次递增,非int类型字典排序。
    底层存放示例

他是按照索引的字段,第一个字段排序,相等的话,则看第二个字段比较大小。所以如果查询条件跳过第一个字段,直接查询第二、第三,或者是第三字段的话,那么这个是无序的,自然用不了索引。

--  如果联合索引是 INDEX `idx`(`realname`, `mobile`, `phone`) USING BTREE (注意和上面的案例图片不是一个表,但是索引结构相同)
EXPLAIN SELECT * FROM zt_user WHERE realname = 'lin' AND mobile = '1732100' AND phone = '[email protected]';

EXPLAIN SELECT * FROM zt_user WHERE mobile = '1732100' AND phone = '[email protected]';

EXPLAIN SELECT * FROM zt_user WHERE phone = '[email protected]';

explain后的执行情况是:

结果一

结果二

结果三


mysql 的索引最左原则就很清晰了。索引多个字段,会按照字段顺序依次比较大小建立索引,如果跳过这个顺序的话,则索引失效。前提是没有其他索引进行影响

你可能感兴趣的:(Mysql 索引最左匹配原则)