# 1. MySQL 8.0 自适应哈希索引的运行时构建? A AHI 由 InnoDB 运行时根据热点等值访问自动构建,占用 buffer pool 内存且只对等值查询有效,高并发下可能成为争用热点 ✓ 正确答案 B AHI 的数据存储在磁盘上 C AHI 可以加速范围扫描 D AHI 需要 DBA 手动创建索引
# 2. PostgreSQL 中自适应连接(Adaptive Join)的应用场景? A PG 的 join 方法在执行中可动态变化 B PostgreSQL 没有执行期切换 join 方法的机制,其自适应体现在 generic/custom plan 选择与统计驱动的计划更新 ✓ 正确答案 C PG 执行中可在 Hash Join 与 Nested Loop 间自动切换 D SQL Server 的 Adaptive Join 只在编译期决定 join 方法
# 3. PostgreSQL 的自适应优化? A autovacuum 不会触发 ANALYZE B PG 支持执行中切换 join 方法 C JIT 只用于排序操作 D PG 的自适应优化包括 generic/custom plan 选择、autovacuum 统计更新与 JIT 编译,但计划生成后执行中不会改变 ✓ 正确答案
# 4. CBO 的统计信息依赖,统计陈旧如何影响执行计划? A CBO 不完全依赖统计信息 B join 方法选择与统计无关 C 并行度决策不依赖统计 D 统计陈旧会使扫描方式、join 顺序与方法全部按错误行数决策,典型于批量写入后未 ANALYZE,需用 EXPLAIN ANALYZE 定位并刷新 ✓ 正确答案
# 5. CBO 的转换规则,子查询展开、谓词下推、JOIN 顺序? A 子查询展开会固定 join 顺序 B optimizer_switch 控制 PG 的改写规则 C 转换规则(子查询展开、谓词下推、视图合并)先改写计划空间,再由代价搜索选择最优计划,改写不全会锁死 join 顺序 ✓ 正确答案 D 改写发生在执行阶段
# 6. CBO(Cost-Based Optimizer)的工作原理,基于代价模型选择最优计划? A CBO 通过统计信息与代价模型比较候选计划的总代价选优,"最优"是模型意义的,受统计失真与参数失配影响 ✓ 正确答案 B 代价评估发生在执行阶段 C CBO 不依赖统计信息 D CBO 保证找到全局最优计划
# 7. PostgreSQL 的 GEQO(Genetic Query Optimizer),连接数 > 12 时启用? A GEQO 保证找到最优连接顺序 B 表连接数超过 geqo_threshold(默认 12)时 PG 用遗传算法近似搜索 join 顺序,结果近优且存在随机性 ✓ 正确答案 C geqo_threshold 默认值为 3 D GEQO 只影响单表查询
# 8. RBO(Rule-Based Optimizer)的过时,Oracle 10g 后完全弃用? A RBO 按固定规则选择计划、不参考统计,Oracle 10g 起 CBO 成为默认且 RBO 路径被弃用,但规则性改写仍有遗留 ✓ 正确答案 B RBO 会随数据分布自动调整计划 C 现代优化器完全没有任何规则性改写 D Oracle 19c 仍默认使用 RBO
# 9. adaptive plans 的代价/收益与生产环境稳定性取舍 A 自适应计划只在编译期生效 B 自适应计划能在估算失准时运行时自愈,但增加计划不确定性与调试成本,关键语句需监控并固定计划 ✓ 正确答案 C 强制计划会增强自适应能力 D 自适应计划总是提升稳定性
# 10. MySQL 的 Optimizer Switch,开启/关闭优化规则? A optimizer_switch 以特性开关形式控制优化规则(如 semijoin、materialization、ICP),修改后需用 EXPLAIN 与 optimizer trace 验证 ✓ 正确答案 B optimizer trace 无法查看规则是否被采纳 C 该变量只能全局设置不能会话级设置 D 开关不影响任何计划选择
# 11. CBO 与 RBO 的对比? A CBO 的计划比 RBO 更可预测 B RBO 使用统计信息决策 C CBO 不依赖统计信息 D RBO 按固定规则决策、可预测但僵化,CBO 按统计与代价自适应但依赖统计质量,现代数据库以 CBO 为主 ✓ 正确答案
# 12. PostgreSQL geqo_threshold? A geqo_threshold 默认 12,表数超过后 PG 用 GEQO 近似搜索,调大提高搜索精度但规划时间可能指数增长 ✓ 正确答案 B GEQO 与连接数完全无关 C 调小 geqo_threshold 会提高计划质量 D 默认值为 4
# 13. 自适应计划(Adaptive Plan)的概念,执行过程中根据实际统计调整计划? A MySQL 8.0 支持执行期 join 方法切换 B 自适应计划在执行期用运行时反馈(实际行数、内存)调整策略,SQL Server 与 Oracle 有实现,MySQL 与 PG 无执行期计划切换 ✓ 正确答案 C 自适应计划与统计信息无关 D 所有数据库都有自适应计划
# 14. MySQL 自适应哈希索引(AHI)的工作原理与代价,为何仅对热点等值查询有效,其内存开销与不可预测性如何权衡? A AHI 的构建时机可由 DBA 精确控制 B AHI 支持范围扫描加速 C AHI 为高频等值访问的 B-Tree 页构建内存哈希索引实现 O(1) 点查,但内存与维护开销不可预测,写密集或扫描型负载可考虑关闭 ✓ 正确答案 D AHI 的数据存储在磁盘
# 15. Oracle 自适应游标共享? A ACS 强制所有绑定值共用同一计划 B ACS 监控绑定值与执行效果,将游标从 bind-sensitive 升级为 bind-aware,按绑定值所在直方图桶区间选择不同计划 ✓ 正确答案 C ACS 是 MySQL 8.0 的功能 D ACS 与直方图没有任何关系
# 16. CBO 与 Hint 的关系,Hint 是优化器的例外通道还是调优反模式?统计信息失真时如何用 Hint 纠正计划,其维护风险与替代手段是什么? A Hint 是绕过代价评估的例外通道,应先修统计再考虑 Hint,长期依赖 Hint 会锁死计划并掩盖根因 ✓ 正确答案 B Hint 永远优于统计调优 C Hint 失效不会影响任何性能 D Hint 应作为每个 SQL 的常规配置
# 17. Statistics 卡(pg_statistic / sys.stats)的更新策略与自动采样阈值 A SQL Server 的统计阈值与表行数无关 B PG 按"修改行数 > threshold+scale×行数"触发自动 ANALYZE,SQL Server 小表阈值约 500+20%×行数、2016+ 大表用动态阈值 ✓ 正确答案 C PG 的 scale_factor 默认值为 0.5 D 两库都没有自动统计更新
# 18. RBO 的常见规则,基于启发式的表顺序、驱动表与索引选择规则有哪些,相比 CBO 它在统计信息缺失时为何仍有用武之地? A 现代 CBO 完全抛弃了 RBO 的一切经验 B RBO 依赖统计信息决策 C RBO 以访问路径等级、受限表驱动、索引优先等启发式规则决策,无需统计即可给出经验合理计划,但无法处理数据分布差异 ✓ 正确答案 D RBO 能正确处理倾斜分布