# 1. CBO(Cost-Based Optimizer)的代价估算模型,选择率、基数、CPU/IO/网络代价的统计与回归? A 选择率与基数决定算子输入规模,CPU/IO/网络代价按标定权重加权,模型误差需硬件标定与回归校准 ✓ 正确答案 B CBO 完全依赖规则,不需要代价 C 选择率越高代价越低 D 网络代价只影响分布式查询,不影响代价模型
# 2. Join 顺序优化,动态规划(DP)、遗传算法(GA)、Volcano/Cascades 框架的工程取舍? A DP 保证最优但指数级、受限表数;GA 可扩展但非最优;Cascades 用 memo+剪枝在最优与可扩展间折中 ✓ 正确答案 B DP 可以扩展到任意多表 C GA 保证全局最优 D Cascades 不使用 memo 结构
# 3. RBO 与 CBO 的分层,哪些规则优化(子查询上拉、谓词下推、连接消除)属于 RBO,哪些需要代价估算? A Join 算法选择属于 RBO B 所有优化都依赖代价,属于 CBO C 谓词下推需要代价估算 D 谓词下推、连接消除等恒优规则走 RBO,Join 顺序与算法选择等依赖代价的走 CBO ✓ 正确答案
# 4. 直方图与基数估算,等频/等高直方图、多列相关性与采样误差如何导致基数高估/低估,从而选错 Join 顺序? A 等频/等高直方图近似估算基数,多列相关性破坏独立假设、采样误差导致偏差,进而选错 Join 顺序 ✓ 正确答案 B 直方图能精确估算基数,无误差 C 多列相关性不会影响基数估算 D 基数偏差只影响返回行数,不影响 Join 顺序
# 5. Hash Join 的代价模型(构建/探测、内存内 vs 溢出)与优化器对内存的预估 A 优化器不需要预估 Hash Join 的内存 B Hash Join 不存在落盘 C 构建侧永远是大表 D 构建+探测两阶段计代价,构建表能否内存内决定是否落盘,优化器按估算行数与内存预算预估 ✓ 正确答案
# 6. Join 算法选择,Nested Loop、Hash Join、Sort-Merge Join、Index Nested Loop 的代价权衡? A Sort-Merge Join 不需要排序 B Nested Loop 总比 Hash Join 快 C Hash Join 适合大表等值连接、Nested Loop 适合小表、Sort-Merge 需排序、Index NLJ 用索引加速,按数据量与索引选择 ✓ 正确答案 D Index Nested Loop 不适合带索引的表
# 7. 统计信息(Histogram、Sample、Cardinality Estimation)的自动收集与失真检测? A 采样率越高越好,且不影响失真 B 统计信息只需收集一次,永不失效 C 通过 ANALYZE/采样构建直方图,并通过对比实际行数与阈值检测过期,失真时需重新 ANALYZE ✓ 正确答案 D 失真检测只能人工执行
# 8. 参数化查询与计划缓存,Prepared Statement 下"通用计划 vs 定制计划"的取舍,计划不稳定(plan instability)如何缓解? A 通用计划复用稳定但可能非最优,定制计划按参数优化但每次重算,计划不稳定需用计划策略与缓存失效控制缓解 ✓ 正确答案 B 定制计划永远最优 C 通用计划永远最优 D 计划不稳定与参数无关
# 9. 优化器 Hint 与人工干预的边界,何时该用 hint,如何验证 hint 的必要性与副作用(统计信息更新后计划退化)? A Hint 应一律使用,无需验证 B Hint 应在统计失真且优化器反复选错时使用,需验证有效,并警惕统计信息更新后计划退化 ✓ 正确答案 C Hint 会随数据变化自适应调整 D Hint 只影响执行,不影响计划
# 10. 统计信息新鲜度,自动更新阈值、采样比例与手动 ANALYZE 的工程实践,统计严重过期时会有什么症状? A 统计信息永不需手动 ANALYZE B 自动更新依据变更阈值触发,采样比例权衡精度,过期症状是估算行数与实际偏差大导致计划退化 ✓ 正确答案 C 采样比例越高越容易过期 D 统计过期只影响展示,不影响计划
# 11. Join 顺序的优化,DP 与启发式的权衡? A DP 可扩展到任意表数 B DP 保证最优但指数级、限表数,启发式可扩展但非最优,工程上按表数混合使用 ✓ 正确答案 C 启发式保证全局最优 D DP 与启发式在最优性上完全相同
# 12. 优化器的逻辑优化,常量折叠、谓词化简、外连接消除与子查询上拉 A 逻辑优化会改变查询结果 B 常量折叠、谓词化简、外连接消除、子查询上拉等都是保持语义的等价改写,利于后续优化 ✓ 正确答案 C 外连接消除会改变结果语义 D 子查询上拉会增加代价
# 13. Cardinality Estimation 偏差(业界普遍问题)如何被反馈优化与历史查询重放补救? A 反馈优化与执行结果无关 B 基数估计偏差无法补救 C 反馈优化用实际执行结果修正估算,历史查询重放用真实负载校准模型,共同补救估算偏差 ✓ 正确答案 D 历史重放只会放大偏差
# 14. 代价模型的硬件标定,不同存储介质(HDD/SSD/内存)下 IO 代价权重如何校准,错误标定会导致什么偏差? A 标定只影响展示,不影响计划 B 所有介质的 IO 代价相同,无需标定 C 不同介质 IO 成本差异大,需基准测试标定权重,错误标定会导致选错访问方式或 Join 算法 ✓ 正确答案 D 错误标定只会让查询更快
# 15. 统计信息过期对执行计划的影响与手动 ANALYZE? A 过期统计不影响优化器 B 过期统计导致基数估算失真、计划退化,手动 ANALYZE 强制刷新统计以纠正 ✓ 正确答案 C 手动 ANALYZE 会让计划更差 D ANALYZE 只能自动执行,不能手动
# 16. 执行计划缓存失效,统计信息变化与 plan 重算? A 计划缓存永不失效 B 统计信息或表结构变化会使缓存计划失效并触发重算,失效策略需权衡复用与新鲜度 ✓ 正确答案 C 统计信息变化不影响缓存计划 D 失效后直接复用旧计划
# 17. Hash Join vs Nested Loop 的选择,驱动表与选择性? A Nested Loop 适合大表匹配多 B Hash Join 总比 Nested Loop 快 C 匹配少、驱动表小且带索引时 Nested Loop 优,等值大表匹配多时 Hash Join 优,驱动表与选择性是决策关键 ✓ 正确答案 D 驱动表选择不影响 Nested Loop 代价
# 18. 优化器正确性的测试方法(随机查询与 plan diff、查询重放) A 查询重放只能用于 OLTP 查询 B 优化器无需测试,天然正确 C plan diff 只比较耗时,不比较计划 D 随机查询对比结果验证正确性,plan diff 检查计划变化,查询重放用真实负载检测回归 ✓ 正确答案