覆盖索引
对于概念可以举一个例子
假设一条语句执行的是
select ID form T
where k between 3 and 5
假设k是索引,因为Innodb的的辅助索引是只存主键值(ID)的,如果查询别的数据,就需要根据k索引树找到对应数据的ID值,然后再根据ID值去主键索引中查找具体要查找的数据,这个过程也叫做回表
但是我们这里只是要查询ID,在辅助索引上就可以直接获得,而不用进行回表,这种“覆盖了”我们查询需求,我们称之为覆盖索引
最左前缀原则
最左匹配原则是非常重要的原则
- mysql会一直向右匹配直到遇到
范围查询(<,>,between,like)就停止匹配,比如
select * form table
where a = 3 and b = 4 and c > 5 and d = 6
d是用不到索引的
- =和in可以乱序,比如
select * form table
where a = 3 and b = 4 and c = 5
建立(a,b,c)索引可以任意顺序,mysql的查询优化器可以帮助你优化成索引可以识别的形式
- 假设一个联合索引(a,b)那么这个索引是先按照a排序,然后再按照b排序的,也就是说
select * form table
where a=5
可以用到联合索引,而
select * form table
where b=5
则不能用到索引,因为b相对于a是顺序的,而自己是乱序的
参考文章
覆盖索引&&最左前缀原则&&索引下推
索引6:联合索引的最左匹配原则
本文介绍了MySQL索引中的覆盖索引概念,它允许查询直接在辅助索引上完成,无需回表。同时,讲解了最左前缀原则,即MySQL如何根据最左边的列进行索引匹配。举例说明了如何优化查询以利用索引,包括联合索引的使用和排序。理解这些原则有助于提升数据库查询效率。
2192

被折叠的 条评论
为什么被折叠?



