select _ from t_student where class between 200 and 300需要执行几次索引树的搜索操作,会扫描多少行

简介: select _ from t_student where class between 200 and 300需要执行几次索引树的搜索操作,会扫描多少行

表初始化语句如下:

CREATE TABLE `t_student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '',
  `class` varchar(50) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
    index class_idx(class)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

insert into t_student(`name`,class) values('小明', '100'),('小詹', '200'),('小龙', '300'),('小红', '400'),('小哈', '500'),('小屁孩', '600');

执行查询的SQL语句如下:

select * from t_student where class between 200 and 300;

我们一起来看看这条 SQL 查询语句的执行流程:

  1. 在 class_idx 索引树上找到 class=200 的记录,取得 ID = 2;
  2. 回到 ID 索引树查到 ID=2 对应的 行的结果数据R2;
  3. 在 class_idx 索引树取下一个值 class=300,取得 ID=3;
  4. 回到 ID 索引树查到 ID=3 对应的 行结果数据R3;
  5. 在 class_idx 索引树取下一个值 class=400,不满足条件,循环结束。

在这个过程中,回到主键索引树搜索的过程,我们称为回表。可以看到,这个查询过程读了 class_idx 索引树的 3 条记录(步骤 1、3 和 5),回表了两次(步骤 2 和 4)。

因为主键索引的叶子节点关联的数据是整行数据,所以想要读取整行数据不得不回表。那么,什么情况下可以经过索引优化,避免回表过程呢?

覆盖索引

如果执行的语句是 select id from t_student where class between 200 and 300,这时只需要查 ID 的值,而 ID 的值已经在 class_idx 索引树上(普通索引的叶子节点数据是主键)了,因此可以直接提供查询结果,不需要回表。也就是说,在这个查询里面,索引 class_idx 已经“覆盖了”我们的查询需求,我们称为覆盖索引。
由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。
需要注意的是,在引擎内部使用覆盖索引在索引 class_idx 上其实读了三个记录,步骤1、3、5,但是对于 MySQL 的 Server 层来说,它就是找引擎拿到了两条记录,因此 MySQL 认为扫描行数是 2。

相关文章
|
设计模式 算法 NoSQL
阿里巴巴官方上线!号称国内Java八股文天花板(终极版)首次开源
金九银十已经过半了,但还是有很多Java程序员没有找到工作或者成功跳槽,跳槽成功的也只是从一个坑中,跳入另一个坑中……
|
9月前
|
安全 算法 网络安全
HTTP和HTTPS的区别
本文介绍HTTP与HTTPS的区别、HTTPS链接建立过程及常见加密算法。HTTP为明文传输,易被窃听;HTTPS通过SSL/TLS协议加密,确保数据安全。HTTPS使用端口443,提供认证机制。文中还详细讲解了对称加密(如AES、DES)和非对称加密(如RSA、ECC)算法的特点及应用场景。
【SPSS】多因素方差分析详细操作教程(附案例实战)
【SPSS】多因素方差分析详细操作教程(附案例实战)
2827 0
|
11月前
|
人工智能 IDE Java
AI 代码工具大揭秘:提高编程效率的必备神器!
【10月更文挑战第1天】近年来,人工智能得到了迅猛的发展,并在各行各业都得到了广泛应用。尤其是近两年来,AI开发工具逐渐成为开发者们的新宠,其中 GitHub Copilot 更是引发了无限可能性的探索。
582 9
AI 代码工具大揭秘:提高编程效率的必备神器!
|
11月前
|
人工智能 机器人 物联网
室内垂直农业:城市农业的可持续解决方案
【10月更文挑战第15天】随着城市化进程加速,人口增长与农业土地稀缺的矛盾日益突出。室内垂直农业作为一种创新模式,通过在建筑物内多层次种植,大幅提高了单位面积产量,成为解决城市食物需求和农业可持续发展的重要方案。它具有资源高效利用、环境友好、全年生产及便捷物流等优势,并有望推动农业现代化和经济发展,尽管仍面临技术挑战和高成本问题,但在政策支持下发展前景广阔。
|
SQL JavaScript 关系型数据库
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
号称下一代Node.js,Typescript以及go的orm的prisma 浅谈如何在nest.js中使用
|
JSON 安全 JavaScript
jsonp和跨域:实现跨域请求的巧妙方法
jsonp和跨域:实现跨域请求的巧妙方法
|
消息中间件 Cloud Native Serverless
构建智算时代的云原生应用平台,2023 云原生产业大会,阿里云在这里!
构建智算时代的云原生应用平台,2023 云原生产业大会,阿里云在这里!
|
机器学习/深度学习 存储 人工智能
人工智能直播的趋势分析报告
人工智能直播是指通过人工智能技术来模拟真人直播,通过机器学习和自然语言处理等技术实现。随着人工智能技术的不断发展,人工智能直播在近年来得到了广泛应用。
835 0
|
安全 JavaScript Shell
bugku web篇(二)
bugku web篇(二)
356 0
bugku web篇(二)