联合索引最左匹配原则
如果有一个2列的索引(col1,col2),则已经对(col1)、(col1,col2)上建立了索引;
如果有一个3列索引(col1,col2,col3),则已经对(col1)、(col1,col2)、(col1,col2,col3)上建立了索引;
例如:
组合索引(a,b)
explain select * from test where a=1 and b=1;
explain select * from test where b=1 and a=1;
在查询解释中显示都用到了索引,是因为:
mysql在处理where条件是,优化查询条件一批匹配索引的位置,直到遇到范围查询(>、<、between、like)就停止匹配,也就是说mysql会自动优化查询条件来匹配索引,来满足使用索引的条件。
上述例子中创建(a,b)索引,也就相当于创建了索引a 和索引 ab(只能从左到右顺序组合创建)。这样在where条件中 将使用最频繁的字段写在前面,也能匹配上。
但。还有些例子如果where条件中只有 where b=1会不会用到复合索引?
答案是会用到。原理是:
根据mysql的原理,只要是索引或者满足索引的一部分就可以使用index方式扫描(explain下的type类型),mysql都可能会用到这个复合索引,但有一个致命的缺点!效率不高。mysql会从索引中的第一个数据一个个的查找到最后一个数据,直到找到符合判断条件的某个索引。
注意:复合索引 什么情况下才能真正被调用?最左侧的索引字段先进行了等值匹配,之后的字段变得有序时,才会用到这个复合索引。简单说。就是复合索引的字段最好有有序的才会确保用到它。
总结
联合索引的最左原则就是建立索引KEY union_index (a,b,c)时,等于建立了(a)、(a,b)、(a,b,c)三个索引,从形式上看就是索引向左侧聚集,所以叫做最左原则,因此最常用的条件应该放到联合索引的组左侧。
利用联合索引加速查询时,联合查询条件符合“交换律”,也就是where a = 1 and b = 1 等价于 where b = 1 and a = 1,这两种写法都能利用索引KEY union_index (a,b,c)。
联合索引最左匹配原则相关推荐
- 联合索引-最左匹配原则
前言: 面试官:建过索引嘛? 我有一个朋友:见过呀! 面试官:那你知道MySQL的执行计划嘛? 我有一个朋友:啊?!! 面试官:那你肯定知道最左匹配原则吧. 我有一个朋友:额... 想必大家面试时都被 ...
- 简述一下索引的匹配原则_Mysql联合索引最左匹配原则
[toc] 为什么使用联合索引 以联合索引(a,b,c)为例 建立这样的索引相当于建立了索引a.ab.abc三个索引.一个索引顶三个索引当然是好事,毕竟每多一个索引,都会增加写操作的开销和磁盘空间的开 ...
- 联合索引最左匹配原则成因
使用col3,col2,col1 顺序建立联合索引,通过col3的值建立一个b+tree ,通过关键值去查找"Alice",在叶子节点中找到两个"Alice", ...
- Mysql复合索引最左匹配原则以及索引失效条件
Mysql复合索引最左匹配原则以及索引失效条件 复合索引最左匹配原则 用EXPLAIN 来查看语句是否用到了索引 索引失效的条件 一般性建议 复合索引最左匹配原则 复合索引又叫联合索引.两个或更多个列 ...
- 数据库索引最左匹配原则
索引最左匹配原则 建立联合索引时会遵循最左匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配 例如: 为user表中的name.address.phone列添加联合索引 ALTER TABL ...
- 索引使用原则-联合索引最左匹配
前面我们说的都是针对单列创建的索引,但有的时候我们的多条件查询的时候,也会建立联合索引.单列索引可以看成是特殊的联合索引. 比如我们在user 表上面,给name 和phone 建立了一个联合索引. ...
- mysql 最左_mysql索引最左匹配原则
创建表 插入 10000 条数据 建立了联合索引(a,b,c) 验证: explain 指令详解可以查看 explain select * from test where a<10 ; expl ...
- mysql索引最左匹配原则的理解
我记得网易面试的时候问到了.阿里也面到了 创建表 create table test( a int , b int, c int, d int, key index_abc(a,b,c) )engin ...
- 简述一下索引的匹配原则_索引最左匹配原则
写在前面:我在上大学的时候就听说过数据库的最左匹配原则,当时是通过各大博客论坛了解的,但是这些博客的局限性在于它们对最左匹配原则的描述就像一些数学定义一样,往往都是列出123点,满足这123点就能匹配 ...
最新文章
- 利用zookeeper实现发布订阅模式
- oracle创建数据库步骤
- OpenGL相机控制之一
- 保证一个用户已选取的记录不被其他用户选取
- 测试驱动开发_DevOps之浅谈测试驱动开发
- 第五天、LAMP架构
- 拿完年终奖换工作?频繁跳槽职场人工资低于同龄人平均水平
- java 不规则图形_java 根据点画不规则封闭图形
- 【图论】最短路学习笔记
- vc6.0到vc 2008(vc 9.0)的变化
- android 微信地图定位失败,微信端H5使用百度地图定位获取当前位置安卓定位不准...
- jpg图片批量压缩的简单方法
- 幼儿园体育游戏电子计算机教案,幼儿园体育游戏活动教案8篇
- android系统应用开发常用的adb命令个人收藏集锦(不断更新)
- ROS中处理回调数据
- 猕猴桃酵素的功效_过路老熊_新浪博客
- Python零基础学习
- Deep Learning 最优化方法
- oracle如何删除一个用户下的所有数据?
- UE4 Vertex Painting 制作路面积水效果