某查询只需要返回 user_id、user_name 两列,并按 status 条件过滤。数据库中存在联合索引(status, user_id, user_name),优化器可以直接从该索引中取得过滤条件和返回列。这个索引之所以可能提高查询效率,主要是因为()。
覆盖索引指查询需要的列已经包含在索引中,数据库可以直接利用索引完成过滤和返回结果,减少或避免再根据索引指针访问数据行的回表过程。它常用于高频查询优化,但并不是索引越多越好,索引会占用空间,也会增加写入和维护成本。
选项分析
正确。覆盖索引减少回表,是本题核心。
错误。去重不是覆盖索引的主要作用,是否去重取决于查询语义和索引类型。
错误。索引需要结合查询条件、选择性、返回列和执行计划判断,不是建了就一定快。
错误。索引用于辅助数据检索,不是备份文件。
本题为什么容易错
容易错在把覆盖索引理解成“索引范围更大”。真正关键是查询需要的列都能从索引中拿到。如果 SELECT 里又取了索引外的大字段,可能仍然需要回表。
简短答案
覆盖索引为什么可以减少回表查询,正确答案是 A(查询所需列都能从索引中获得,减少再访问数据行的回表操作)。覆盖索引指查询需要的列已经包含在索引中,数据库可以直接利用索引完成过滤和返回结果,减少或避免再根据索引指针访问数据行的回表过程。它常用于高频查询优化,但并不是索引越多越好,索引会占用空间,也会增加写入和维护成本。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 查询所需列都能从索引中获得,减少再访问数据行的回表操作 | 本题正确答案 | 正确。覆盖索引减少回表,是本题核心。 | 看到题干核心场景时优先联想到它 |
| 覆盖索引会自动删除所有重复数据 | 本题干扰项 | 错误。去重不是覆盖索引的主要作用,是否去重取决于查询语义和索引类型。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 只要建立索引,任何 SQL 都不需要优化 | 本题干扰项 | 错误。索引需要结合查询条件、选择性、返回列和执行计划判断,不是建了就一定快。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 覆盖索引只能用于存放数据库备份文件 | 本题干扰项 | 错误。索引用于辅助数据检索,不是备份文件。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- 覆盖索引会自动删除所有重复数据:错误。去重不是覆盖索引的主要作用,是否去重取决于查询语义和索引类型。
- 只要建立索引,任何 SQL 都不需要优化:错误。索引需要结合查询条件、选择性、返回列和执行计划判断,不是建了就一定快。
- 覆盖索引只能用于存放数据库备份文件:错误。索引用于辅助数据检索,不是备份文件。
知识点详解
SQL优化是数据库系统工程师考试中需要结合场景理解的考点。围绕“覆盖索引为什么可以减少回表查询”这类题目,复习时要先看题干描述的是概念定义、适用场景、作用效果,还是与其他选项的区别。本题的题干关键词是“某查询只需要返回 user_id、user_name 两列,并按 status 条件过滤。数据库中存在联合索引(status, user_id, user_name),优化器可以直接从该索引中取得过滤条件和返回列。这个索引之所以可能提高查询效率,主要是因为()”,它指向的核心答案是 A(查询所需列都能从索引中获得,减少再访问数据行的回表操作)。
备考速记
备考速记:题干如果强调“SQL优化”中的关键目标,就先联想到 SQL优化;如果选项里出现 覆盖索引会自动删除所有重复数据、只要建立索引,任何 SQL 都不需要优化、覆盖索引只能用于存放数据库备份文件,不要只看名称熟悉,要判断它们是否真正对应题干场景。
SQL优化 在SQL优化场景中的作用
SQL优化在本题中的核心价值,是解决“某查询只需要返回 user_id、user_name 两列,并按 status 条件过滤。数据库中存在联合索引(status, user_id, user_name),优化器可以直接从该索引中取得过滤条件和返回列。这个索引之所以可能提高查询效率,主要是因为()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 给出SQL优化场景,判断应该选择哪个概念、工具、协议或管理过程。
- 考查SQL优化的作用,要求从四个相近选项中找出最符合题干目标的一项。
- 把SQL优化和覆盖索引会自动删除所有重复数据、只要建立索引,任何 SQL 都不需要优化、覆盖索引只能用于存放数据库备份文件放在一起考,重点看适用场景是否一致。
- 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
SQL优化 在数据库系统工程师软考中的考法
软考选择题通常不会只考概念定义,还会把SQL优化放到SQL优化场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
题干说得很清楚:过滤列和返回列都在联合索引里。这个时候数据库不一定需要再回到数据表取 user_id、user_name,这就是覆盖索引的价值。老师讲这类题时会提醒:索引不是魔法,关键看查询需要的列是否被索引覆盖。
考点定位
索引题不要只背“索引能加快查询”。软考更喜欢问索引为什么快、什么时候不一定快、覆盖索引和普通索引有什么差别。
易错提醒
- 认为所有联合索引都是覆盖索引。
- 忽略 SELECT 返回列,只看 WHERE 条件。
- 只追求增加索引数量,忘记写入成本和存储成本。
备考提示
- 复习索引题时,把索引失效、最左前缀、覆盖索引、回表和执行计划放在一起理解。
- 看到题干强调“查询列都在索引里”,优先想到覆盖索引;看到“索引列上套函数”,优先想到索引可能失效。
你可能还想了解
- 覆盖索引为什么可以减少回表查询?
- SQL优化是什么?
- SQL优化在数据库系统工程师考试中怎么考?
- 数据库系统工程师SQL优化题怎么理解?
- 覆盖索引为什么减少回表怎么考?
- 数据库系统工程师索引题怎么考?
本文小结
本题核心考点是SQL优化在SQL优化场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(查询所需列都能从索引中获得,减少再访问数据行的回表操作)。