标签:tween col between sel HERE 存储引擎 步骤 数据页 主键索引
索引:是为了提高数据查询的效率
常见模型:
InnoDB 的索引模型:B+树(每一个表是好几棵B+树,B+树能够很好地配合磁盘的读写特性,减少单次查询的磁盘访问次数)
索引分为主键索引和非主键索引
基于主键索引和普通索引的查询有什么区别?
如果语句是select * from T where ID=500,即主键查询方式,则只需要搜索ID这棵B+树;
如果语句是select * from T where k=5,即普通索引查询方式,则需要先搜索k索引树,得到ID的值为500,再到ID索引树搜索一次。这个过程称为回表。(回到主键索引树搜索的过程,我们称为回表)
维护:
一个数据页满了,按照B+Tree算法,新增加一个数据页,叫做页分裂,会导致性能下降。空间利用率降低大概50%。当相邻的两个数据页利用率很低的时候会做数据页合并,合并的过程是分裂过程的逆过程。
select * from T where k between 3 and 5
在k索引树上找到k=3的记录,取得 ID = 300;
再到ID索引树查到ID=300对应的R3;
在k索引树取下一个值k=5,取得ID=500;
再回到ID索引树查到ID=500对应的R4;
在k索引树取下一个值k=6,不满足条件,循环结束。
这个查询过程读了k索引树的3条记录(步骤1、3和5),回表了两次(步骤2和4)
覆盖索引:减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。
select ID from T where k between 3 and 5 --只需要查询ID值,而id值已经在k索引树上了,所以不需要回表
标签:tween col between sel HERE 存储引擎 步骤 数据页 主键索引
原文地址:https://www.cnblogs.com/8013-cmf/p/12598597.html