当前位置:Gxlcms > 数据库问题 > sql---索引总结

sql---索引总结

时间:2021-07-01 10:21:17 帮助过:13人阅读

)

索引分为主键索引和非主键索引

  • 主键索引:叶子节点存的是整行数据,在InnoDB里,主键索引也被称为聚簇索引(clustered index)。
  • 非主键索引:叶子节点存的是主键索引的值在InnoDB里,非主键索引也被称为二级索引(secondary index)。

基于主键索引和普通索引的查询有什么区别?

  如果语句是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 
  1. 在k索引树上找到k=3的记录,取得 ID = 300;

  2. 再到ID索引树查到ID=300对应的R3;

  3. 在k索引树取下一个值k=5,取得ID=500;

  4. 再回到ID索引树查到ID=500对应的R4;

  5. 在k索引树取下一个值k=6,不满足条件,循环结束。

这个查询过程读了k索引树的3条记录(步骤1、3和5),回表了两次(步骤2和4)

覆盖索引:减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。

select ID from T where k between 3 and 5
--只需要查询ID值,而id值已经在k索引树上了,所以不需要回表

sql---索引总结

标签:tween   col   between   sel   HERE   存储引擎   步骤   数据页   主键索引   

人气教程排行