某查询只需要返回字段 A 和字段 B,而数据库中已有联合索引 (A, B)。在执行查询时,如果仅通过该索引就能取得所需字段,而不必再访问数据表记录,这种情况通常称为()。
覆盖索引指查询所需的数据列已经包含在索引中,数据库可以直接从索引获取结果,减少或避免回表操作。题干中查询只需要 A、B,而联合索引 (A, B) 已覆盖所需字段,因此属于覆盖索引场景。
选项分析
正确。索引覆盖查询所需列,减少回表。
错误。脏读是事务隔离问题,与索引无关。
错误。两阶段提交用于分布式事务一致性。
错误。外连接是 SQL 连接方式,不是索引优化概念。
本题为什么容易错
这题容易把“用了索引”和“覆盖索引”混为一谈。用了索引不一定覆盖查询,只有查询所需字段都能从索引中得到,才叫覆盖索引。
简短答案
覆盖索引为什么可以减少回表,正确答案是 A(覆盖索引)。覆盖索引指查询所需的数据列已经包含在索引中,数据库可以直接从索引获取结果,减少或避免回表操作。题干中查询只需要 A、B,而联合索引 (A, B) 已覆盖所需字段,因此属于覆盖索引场景。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 覆盖索引 | 本题正确答案 | 正确。索引覆盖查询所需列,减少回表。 | 看到题干核心场景时优先联想到它 |
| 脏读 | 本题干扰项 | 错误。脏读是事务隔离问题,与索引无关。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 两阶段提交 | 本题干扰项 | 错误。两阶段提交用于分布式事务一致性。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 外连接 | 本题干扰项 | 错误。外连接是 SQL 连接方式,不是索引优化概念。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 脏读:错误。脏读是事务隔离问题,与索引无关。
- 两阶段提交:错误。两阶段提交用于分布式事务一致性。
- 外连接:错误。外连接是 SQL 连接方式,不是索引优化概念。
知识点详解
数据库索引题经常考索引是否有效、最左前缀、回表和覆盖索引。回表可以理解为先通过索引找到行,再回到数据页取完整记录;覆盖索引则让查询直接在索引里完成。它能提升性能,但也要考虑索引维护成本,不是索引列越多越好。
备考速记
记法:覆盖索引就是“索引里已经盖住了我要查的列”。要什么列,索引有什么列,两边对上就可能不用回表。
回表在回表场景中的作用
回表在本题中的核心价值,是解决“某查询只需要返回字段 A 和字段 B,而数据库中已有联合索引 (A, B)。在执行查询时,如果仅通过该索引就能取得所需字段,而不必再访问数据表记录,这种情况通常称为()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 给出回表场景,判断应该选择哪个概念、工具、协议或管理过程。
- 考查回表的作用,要求从四个相近选项中找出最符合题干目标的一项。
- 把回表和脏读、两阶段提交、外连接放在一起考,重点看适用场景是否一致。
- 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
回表在数据库系统工程师软考中的考法
软考选择题通常不会只考概念定义,还会把回表放到回表场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
这题先看查询要什么字段,再看索引里有什么字段。需要 A、B,索引也包含 A、B,就可以直接从索引拿结果。索引不只是用来定位行,有时也能直接提供查询结果。
考点定位
覆盖索引看“查询所需列是否都在索引里”。如果都在,就可能减少回表。
易错提醒
- 认为只要使用了索引就一定是覆盖索引。
- 忽略 SELECT 返回列,只看 WHERE 条件列。
- 为了覆盖所有查询随意加宽索引,忽略写入和维护成本。
备考提示
- 数据库索引复习时,把最左前缀、覆盖索引、回表、索引失效放在一起看。
- 做题时先圈 SELECT 列和 WHERE 条件,再看索引列顺序。
- 相关专题:/guides/database-system-index-leftmost-covering-invalid/
你可能还想了解
- 覆盖索引为什么可以减少回表?
- 回表是什么?
- 回表在数据库系统工程师考试中怎么考?
- 数据库系统工程师回表题怎么理解?
- 覆盖索引和回表区别怎么考?
- 数据库系统工程师索引题怎么考?
本文小结
本题核心考点是回表在回表场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(覆盖索引)。