当前位置: 首页> 健康> 养生 > mysql面试题 Day4

mysql面试题 Day4

时间:2025/7/12 5:29:05来源:https://blog.csdn.net/weixin_37565339/article/details/140245289 浏览次数:0次

1 什么是覆盖索引?对要查询的列 和 查询条件中的列 有什么要求

覆盖索引(Covering Index)是指一个索引包含了一次查询所需的全部列,因此可以完全满足查询需求,而无需访问实际的表行数据。(即避免回表操作)。

覆盖索引的定义

覆盖索引是一个包含查询中的所有列(包括查询条件列、选择列和排序列)的索引。覆盖索引使得查询可以完全通过索引来执行,而不需要读取表的实际数据行。

覆盖索引的要求

  1. 查询条件列(WHERE 子句中的列):这些列可以帮助MySQL快速定位匹配的行。
  2. 选择列(SELECT 子句中的列):这些列是查询返回的列。
  3. 排序列(ORDER BY 子句中的列):如果查询包括排序,这些列应该包含在索引中,以利用索引进行排序。

举个例子

假设有一个表 students,包含以下字段:

  • id(主键)
  • name
  • age
  • grade

假设我们有以下查询:

SELECT name, age FROM students WHERE name LIKE '张%' AND age > 20;

为了使查询可以使用覆盖索引,我们需要创建一个包含 name 和 age 列的复合索引:

CREATE INDEX idx_name_age ON students (name, age);

覆盖索引的好处

  • 提高查询性能:由于所有查询需要的数据都在索引中,MySQL不需要回表查找,减少了I/O操作。
  • 减少数据页访问:访问索引通常比访问数据页更快,特别是在表较大的情况下。
  • 优化磁盘使用:使用覆盖索引可以减少磁盘读取操作,提高缓存命中率。

有了覆盖索引 idx_name_age 后,查询过程如下:

  1. 索引扫描:MySQL使用 idx_name_age 索引找到所有 name LIKE '张%' 的记录。
  2. 索引下推(ICP):在索引扫描过程中,直接在索引中检查 age > 20 的条件。
  3. 返回结果:由于 name 和 age 都包含在索引中,MySQL可以直接从索引返回结果,而不需要访问实际表数据。

总结

覆盖索引通过包含查询所需的所有列,显著提高了查询性能,尤其是对大表的查询。为了充分利用覆盖索引,建议在设计索引时,综合考虑查询条件列、选择列和排序列,并在一个索引中包含这些列。

关键字:mysql面试题 Day4

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: