数据库系统工程师 · 高频练习

索引下推为什么可以减少回表次数?

中级 单选题 第 693 题 中等 数据库系统工程师索引下推回表联合索引查询优化
题目

某查询使用联合索引定位到一批候选记录后,数据库可以在扫描索引时先利用索引中已有的条件继续过滤一部分记录,再决定是否回表读取完整数据行。这个优化思路更接近()。

A 索引条件下推
B 脏读
C 死锁检测
D 两阶段提交
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
A
答案解析

索引条件下推的核心思路是:能在索引层判断的条件,尽量先在索引扫描阶段判断,减少不必要的回表。它不是事务隔离异常,也不是分布式事务提交协议。题干强调“扫描索引时先过滤,再决定是否回表”,因此更接近索引条件下推。

选项分析

A

正确。索引条件下推就是把可在索引层判断的条件尽量提前过滤,以减少回表。

B

错误。脏读是读到了未提交数据,属于事务隔离问题。

C

错误。死锁检测用于发现事务之间的循环等待。

D

错误。两阶段提交用于分布式事务一致性,不是单表索引过滤优化。

本题为什么容易错

这题容易和覆盖索引混淆。覆盖索引强调查询需要的列都在索引里,可能不用回表;索引下推强调即使后面还可能回表,也先把能在索引里判断的条件提前过滤掉。两个都能减少成本,但角度不同。

先看结论

简短答案

索引下推为什么可以减少回表次数,正确答案是 A(索引条件下推)。索引条件下推的核心思路是:能在索引层判断的条件,尽量先在索引扫描阶段判断,减少不必要的回表。它不是事务隔离异常,也不是分布式事务提交协议。题干强调“扫描索引时先过滤,再决定是否回表”,因此更接近索引条件下推。

解析

易混淆概念对比表

概念本题判断区别要点记忆提示
索引条件下推 本题正确答案 正确。索引条件下推就是把可在索引层判断的条件尽量提前过滤,以减少回表。 看到题干核心场景时优先联想到它
脏读 本题干扰项 错误。脏读是读到了未提交数据,属于事务隔离问题。 看到该词不要急着选,先判断是否真正解决题干问题
死锁检测 本题干扰项 错误。死锁检测用于发现事务之间的循环等待。 看到该词不要急着选,先判断是否真正解决题干问题
两阶段提交 本题干扰项 错误。两阶段提交用于分布式事务一致性,不是单表索引过滤优化。 看到该词不要急着选,先判断是否真正解决题干问题
本题易混淆选项怎么区分
  • 脏读:错误。脏读是读到了未提交数据,属于事务隔离问题。
  • 死锁检测:错误。死锁检测用于发现事务之间的循环等待。
  • 两阶段提交:错误。两阶段提交用于分布式事务一致性,不是单表索引过滤优化。
复习

知识点详解

索引条件下推属于查询优化中的提前过滤思想。传统理解里,数据库通过索引找到候选记录后可能逐条回表,再在数据行上判断剩余条件;如果部分剩余条件涉及的列已经在索引中,就可以先在索引层判断,过滤掉一部分候选记录。这样减少回表次数,也减少了数据页访问压力。

备考速记

速记:能在索引里先筛掉,就别急着回表搬整行。

查询优化在查询优化场景中的作用

查询优化在本题中的核心价值,是解决“某查询使用联合索引定位到一批候选记录后,数据库可以在扫描索引时先利用索引中已有的条件继续过滤一部分记录,再决定是否回表读取完整数据行。这个优化思路更接近()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。

拓展

同类题怎么考

  • 给出查询优化场景,判断应该选择哪个概念、工具、协议或管理过程。
  • 考查查询优化的作用,要求从四个相近选项中找出最符合题干目标的一项。
  • 把查询优化和脏读、死锁检测、两阶段提交放在一起考,重点看适用场景是否一致。
  • 题干通常会出现一个关键动作或目标,先定位关键词,再回到选项逐一排除。
查询优化在数据库系统工程师软考中的考法

软考选择题通常不会只考概念定义,还会把查询优化放到查询优化场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。

解题思路

老师讲索引优化时会说,回表不是不能做,但能少做就少做。假设索引里已经有 status、create_time 这些列,数据库可以先在索引里把明显不符合条件的记录筛掉,剩下的再回表。这就比每个候选都回表更省。

考点定位

索引下推题看两个信号:条件列在索引里、先在索引层过滤。它解决的是减少回表和无效数据行读取,不是解决事务一致性。

易错提醒

  • 认为只要用了联合索引,就一定不会回表。
  • 把索引下推和覆盖索引当成完全相同的概念。
  • 查询写法让条件无法在索引层有效判断,例如对列做复杂函数处理。

备考提示

  • 索引优化题可以按三步看:能不能定位范围,能不能在索引里继续过滤,是否还需要回表。
  • 把最左前缀、覆盖索引、回表、索引下推放在一起复习,边界会更清楚。
  • 软考不一定要求掌握某个数据库的实现细节,但要理解“少读无用数据”这个优化方向。

你可能还想了解

  • 索引下推为什么可以减少回表次数?
  • 查询优化是什么?
  • 查询优化在数据库系统工程师考试中怎么考?
  • 数据库系统工程师查询优化题怎么理解?
  • 索引下推是什么意思怎么考?
  • 索引下推为什么减少回表怎么考?

本文小结

本题核心考点是查询优化在查询优化场景中的判断和应用。遇到类似题目时,先看题干描述的目标,再判断哪个选项最符合场景;本题应选择 A(索引条件下推)。