EXPLAIN 读法与连接算法

共 34 题
#

1. EXPLAIN ANALYZE 与 EXPLAIN 的差异,实际执行 vs 估算?

A EXPLAIN 会实际执行 SQL 并返回真实耗时。
B EXPLAIN ANALYZE 不执行 SQL,只输出估算计划。
C EXPLAIN 只输出优化器估算,EXPLAIN ANALYZE 会执行并输出实际统计。 ✓ 正确答案
D EXPLAIN ANALYZE 永远比 EXPLAIN 快。
#

2. EXPLAIN 中 Startup Cost 与 Total Cost 的差异,Sort 节点启动 vs 全代价?

A Startup Cost 是产生第一行输出前的累积代价,Total Cost 是产生全部输出的累计代价。 ✓ 正确答案
B Startup Cost 是节点输出全部行后的总代价。
C Sort 节点的 Startup Cost 通常为 0。
D 两个节点的代价比较只看 Startup Cost。
#

3. EXPLAIN 输出的 cost、rows、width 三个关键字段如何解读?

A cost 是估算代价,rows 是估算行数,width 是估算行宽。 ✓ 正确答案
B rows 表示实际返回行数。
C cost 表示实际执行耗时(毫秒)。
D width 表示表的总宽度。
#

4. EXPLAIN 输出节点,Seq Scan、Index Scan、Index Only Scan、Bitmap Heap Scan、Hash Join、Nested Loop、Sort、Aggregate 的含义?

A Bitmap Heap Scan 适合返回大量行但非全表的场景。 ✓ 正确答案
B Index Only Scan 需要回表取数据,代价最高。
C Hash Join 适合连接两个表都需要排序的场景。
D Nested Loop 适合内层表很大、无索引的场景。
#

5. MySQL EXPLAIN 的 type、key、rows、Extra 字段解读?

A type 从 ALL 提升到 range/ref 通常意味着查询效率提升。 ✓ 正确答案
B Extra 中 Using filesort 表示结果已天然有序,无需排序。
C type 为 ALL 表示使用索引全扫描。
D rows 字段表示实际扫描的行数。
#

6. PostgreSQL EXPLAIN 中的 Buffers、Planning、Execution time 字段含义?

A Buffers 中的 hit 表示从磁盘读取的块数。
B Execution Time 是查询实际执行的总耗时。 ✓ 正确答案
C Planning Time 是查询实际执行耗时。
D Buffers 越大说明查询越快。
#

7. EXPLAIN 输出中的内存使用(work_mem、sort space)?

A 排序超过 work_mem 会落盘到临时文件,代价剧增。 ✓ 正确答案
B work_mem 是数据库全局共享的内存上限。
C work_mem 默认是 1GB。
D work_mem 只影响连接池而非排序。
#

8. EXPLAIN 输出中的行数估算误差与统计信息的关系?

A 统计信息永远准确反映当前数据。
B ANALYZE 会降低查询性能。
C 估算误差不会影响计划选择。
D 统计信息过期会导致 EXPLAIN 中行数估算出现较大误差。 ✓ 正确答案
#

9. EXPLAIN ANALYZE 的副作用(实际执行)?

A EXPLAIN ANALYZE 只生成计划,不执行 SQL。
B EXPLAIN ANALYZE 对 UPDATE 语句也会真正执行修改。 ✓ 正确答案
C EXPLAIN ANALYZE 对任何语句都无副作用。
D EXPLAIN 会执行 SQL 并返回结果。
#

10. EXPLAIN 与 SQL 优化的关系?

A EXPLAIN 只能用于学习,不能用于实际优化。
B 优化 SQL 不需要查看执行计划。
C EXPLAIN 可直接修改 SQL 使其更快。
D 优化后应重新 EXPLAIN 对比验证效果。 ✓ 正确答案
#

11. EXPLAIN 中红色警告(actual rows 远大于 estimated)?

A actual rows 大于 estimated rows 说明统计信息很准确。
B actual rows 远大于 estimated rows 通常提示统计信息失真或估算模型失效。 ✓ 正确答案
C 该警告指向执行计划速度过快。
D 该警告只能通过重启数据库解决。
#

12. Hash Join 的执行计划?

A Hash Join 将较小表构建成哈希表再探测较大表。 ✓ 正确答案
B Hash Join 要求两个输入都已排序。
C Hash Join 需要回表才能得到结果。
D Hash Join 只适用于非等值连接。
#

13. MySQL EXPLAIN FORMAT=JSON 的高级输出?

A JSON 格式比表格格式包含更少的成本信息。
B JSON 格式会自动执行 SQL。
C EXPLAIN FORMAT=JSON 提供细粒度成本与访问类型的结构化信息。 ✓ 正确答案
D JSON 格式不显示索引信息。
#

14. MySQL EXPLAIN 的 Extra 字段?

A Using index 表示需要回表取数据。
B Using filesort 表示结果已天然有序。
C Using temporary 表示使用了临时表,通常伴随额外开销。 ✓ 正确答案
D Using index condition 表示未使用索引。
#

15. MySQL EXPLAIN 的 type 列?

A ALL 表示使用索引全扫描,效率低于 index。
B const 表示主键等值命中,效率最高之一。 ✓ 正确答案
C eq_ref 表示全表扫描。
D type 为 range 表示全表扫描。
#

16. Nested Loop 的执行计划?

A Nested Loop 内层通常应走索引,外层行数越多越高效。
B Nested Loop 总是比 Hash Join 快。
C Nested Loop 不需要任何索引。
D Nested Loop 适合外层行数少且内层有索引的场景。 ✓ 正确答案
#

17. PostgreSQL EXPLAIN (VERBOSE)?

A EXPLAIN (VERBOSE) 会执行 SQL 返回结果。
B EXPLAIN (VERBOSE) 显示每个节点的输出列与表达式。 ✓ 正确答案
C VERBOSE 选项会降低优化器准确性。
D VERBOSE 选项不能与其他选项组合。
#

18. Hash Join 的内存限制,work_mem 不足时落盘到磁盘?

A Hash Join 的哈希表大小不受 work_mem 限制。
B work_mem 不足时哈希表会落盘,表现为 Batches 增大。 ✓ 正确答案
C work_mem 只影响排序不影响哈希。
D 落盘对 Hash Join 性能无影响。
#

19. Hash Join 的工作原理,构建哈希表、探测匹配?

A Hash Join 构建阶段使用较大表构建哈希表。
B Hash Join 支持非等值连接。
C Hash Join 探测阶段逐行在哈希表中查找匹配。 ✓ 正确答案
D Hash Join 复杂度为 O(M×N)。
#

20. Hash Join 的并行构建,多 worker 并行构建哈希表?

A 并行 Hash Join 完全不需要 gather 节点。
B 并行哈希由多个 worker 并行构建与探测共享哈希表。 ✓ 正确答案
C 并行度越高查询一定越快。
D 并行哈希只支持小表连接。
#

21. Nested Loop Join 的工作原理,外层循环驱动,内层索引查找?

A Nested Loop 外层行数越多效率越高。
B Nested Loop 内层无索引时性能最好。
C Nested Loop 内层每次查找都应利用索引加速。 ✓ 正确答案
D Nested Loop 不需要外层驱动。
#

22. Nested Loop 的代价估算,O(M × N) × 索引代价?

A Nested Loop 总代价与索引无关。
B 内层无索引时 Nested Loop 代价是 O(M×logN)。
C 内层索引可把 Nested Loop 代价从 O(M×N) 降为 O(M×logN)。 ✓ 正确答案
D 外层行数对 Nested Loop 代价无影响。
#

23. Sort Merge Join 的优势,已排序输入的零代价?

A Sort Merge Join 要求输入无序。
B 输入已有序时 Sort Merge Join 可省去排序代价。 ✓ 正确答案
C Sort Merge Join 只能用等值连接。
D Sort Merge Join 总是需要建哈希表。
#

24. MySQL 中 Block Nested Loop(BNL)的实现?

A BNL 每次扫描外层一个行就全扫描内层一次。
B BNL 用 join buffer 缓存外层行,减少内层表扫描次数。 ✓ 正确答案
C BNL 不需要 join buffer。
D BNL 会增加内层扫描次数。
#

25. MySQL Block Nested-Loop(BNL)优化,如何用 join buffer 减少内层表扫描次数,与 Batched Key Access(BKA)的配合与局限?

A BKA 不依赖内层索引。
B BNL 与 BKA 完全无关。
C BKA 在 BNL 基础上利用索引与 MRR 批量回表,减少随机 I/O。 ✓ 正确答案
D join buffer 大小不影响 BNL/BKA。
#

26. Nested Loop 与索引的协同?

A Nested Loop 不需要索引即可高效。
B Nested Loop 内层索引无关紧要。
C 覆盖索引会增加回表次数。
D Nested Loop 内层有索引时单次查找代价更低。 ✓ 正确答案
#

27. 常见的节点类型,Materialize、Subquery Scan、Append、Limit、Gather?

A Append 节点用于汇总并行 worker 的结果。
B Gather 节点用于把多个子计划结果合并(如 UNION)。
C Limit 节点会全量计算后再截断。
D Materialize 节点把子查询结果物化,避免重复计算。 ✓ 正确答案
#

28. Bitmap Heap Scan 的应用?

A Bitmap Heap Scan 适合返回几乎全部行的场景。
B Bitmap Heap Scan 不需要索引。
C Bitmap Heap Scan 每次都全表扫描。
D Bitmap Heap Scan 先建位图再按物理顺序批量读页,减少随机 I/O。 ✓ 正确答案
#

29. Index Scan 与 Index Only Scan 的差异?

A Index Only Scan 需要回表取数据。
B Index Scan 总是比 Index Only Scan 快。
C Index Only Scan 直接从索引读取所需列,无需回表。 ✓ 正确答案
D 两者代价完全相同。
#

30. Seq Scan 与 Index Scan 的取舍?

A Index Scan 永远优于 Seq Scan。
B 返回大量行时 Seq Scan 通常比 Index Scan 更优。 ✓ 正确答案
C Seq Scan 任何情况下都更慢。
D 表越大越应该用 Seq Scan。
#

31. Aggregate 节点的代价?

A GroupAggregate 要求输入按分组键有序。 ✓ 正确答案
B HashAggregate 要求输入有序。
C 聚合代价与输入行数无关。
D 分组聚合总是需要排序。
#

32. Materialize 节点的用途?

A Materialize 会重复执行子查询多次。
B Materialize 只用于并行查询。
C Materialize 将结果物化缓存,避免重复计算。 ✓ 正确答案
D Materialize 会降低可读性但无性能意义。
#

33. EXPLAIN 中 Sort 节点的代价构成,内存排序与磁盘归并排序的代价差异,Sort Method(quicksort/external merge)如何影响执行时间?

A external merge sort 在内存中完成,代价低。
B quicksort 表示内存排序,external merge 表示磁盘归并排序。 ✓ 正确答案
C 排序代价与 work_mem 无关。
D Sort Method 永远为 quicksort。
#

34. EXPLAIN 中 cost 字段的含义与量纲,它如何表达 I/O 与 CPU 的相对代价,total cost 与 start-up cost 在计划比较中如何解读?

A cost 是无量纲相对代价,综合 I/O 与 CPU 权重。 ✓ 正确答案
B cost 直接表示执行耗时毫秒数。
C 优化器比较计划只看 start-up cost。
D cost 与磁盘读取无关。