MySQL基础之索引(二)


前言

我们称 由索引K找到主键索引,再由主键索引树查找对应行 的过程为回表, 这个过程会额外消耗资源, 因此本文介绍如何避免回表


提示:以下是本篇文章正文内容,下面案例可供参考

一、覆盖索引

select * from T where k between 3 and 5
select id from T where k between 3 and 5

上一行搜索全部数据的SQL会造成回表 , 而下一行直接对主键字段id进行检索就能避免回表的过程

覆盖索引可以显著减少树的搜索次数,避免了回表的过程对性能也有显著提升

关于联合索引 : 如果对于一个热点表 , 用户需要根据一个主键的内容查找另一个主键的内容,那么通过联合主键避免回表是很有必要的

二、最左前缀原则

最左前缀原则涉及到索引项的问题 : 索引项是按照索引定义里面出现的字段排序的

上面提到的联合索引就能组成一个索引项,如(id,address)

由此在查找所有居住在某地的人时,在通过主键id定位到第一个居住地为xxx的记录,然后向后继续查找,直到找出所有居住地为xxx的用户

那么建立联合索引时是如何对索引内字段进行排序的呢? 即,(A,B) OR (B,A)
如果已经有了(A,B)索引,我们就不需要再在A字段上新建索引了

如果不得不对A,B各自新建一个索引呢? 此时我们需要选择字段长度较短的作为索引,即无需对A,B各自新建索引,而是选择其中字段较小者建立索引 (空间原则)

三、索引下推 index condition pushdown

索引下推针对的也还是减少回表次数 , 可以在索引遍历的过程中对索引所包含的字段进行先判断,过滤不符合条件的记录
而判断过程是innoDB在索引的内部做的

猜你喜欢

转载自blog.csdn.net/qq_45596525/article/details/114684626