假设建立这样一个联合索引
KEY
idx(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 = '123@qq.com';
EXPLAIN SELECT * FROM zt_user WHERE mobile = '1732100' AND phone = '123@qq.com';
EXPLAIN SELECT * FROM zt_user WHERE phone = '123@qq.com';
则explain
后的执行情况是:
结果二
结果三
mysql 的索引最左原则就很清晰了。索引多个字段,会按照字段顺序依次比较大小建立索引,如果跳过这个顺序的话,则索引失效。前提是没有其他索引进行影响
网友评论