# 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 与磁盘读取无关。