打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
索引下(5)

在下列表T中,执行select * from T where k betwee 3 and 5;,需要执行几次树的搜索操作?

mysql> create table T (
ID int primary key,
k int NOT NULL DEFAULT 0, 
s varchar(16) NOT NULL DEFAULT '',
index k(k))
engine=InnoDB;

insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg');

SQL语句执行流程:

  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的记录,不符合条件,结束循环

在这个过程中,回到主键索引搜索树的过程,成为回表。

在这个例子中,由于查询结果所需要的数据只有主键索引上有,所以不得不回表。如果执行的语句是select ID from T where k between 3 and 5;,只需要查询ID的值,而k索引树上有这个值,不需要回表,索引k已经覆盖了查询所需要的值,成为覆盖索引

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

联合索引:将多个字段设置为索引,在B+树上符合最左前缀原则。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
数据库性能调优技术-索引调优_Freeze_Soul In Hard Working
mysql – 使用复杂过滤优化SQL查询
MySql大表分页(附独门秘技)
单集群日搜索请求超 4 亿,开源搜索和分析引擎 Elasticsearche 对 Bay 的性能优化...
【报错记录】Everything搜索不到刚添加的新文件
给有重复记录的表添加唯一索引
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服