功能描述
optimizer_switch 用于控制查询优化器的各项优化策略开关。通过该参数可启用或禁用索引合并、条件下推、Hash Join、半连接等优化器的具体优化路径,影响 SQL 执行计划的选择。属性说明
属性 | 说明 |
参数类型 | FLAGSET |
默认值 | index_merge=off,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=off,block_nested_loop=on,batched_key_access=on,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_indexes=off,skip_scan=off,hash_join=on,subquery_to_derived=off,prefer_ordering_index=off,hypergraph_optimizer=off,derived_condition_pushdown=on,favor_range_scan=off,lazy_index_strategy=off,limit_cond_pushdown=on,pk_preload_pushdown=on,force_batched_key_access=on,bka_keep_order=on,bka_firstmatch=off,icp_cost_aware=off,cost_based_hashjoin=off,join_runtime_filter=off,skip_scan_pushdown=on,limit_aware_join_order=off,prefer_wider_index=on |
取值范围 | index_merge:设置为 on 或 off,启用或禁用索引合并优化。index_merge_union:设置为 on 或 off,启用或禁用索引合并中的 UNION 优化。index_merge_sort_union:设置为 on 或 off,启用或禁用索引合并中的排序 UNION 优化。index_merge_intersection:设置为 on 或 off,启用或禁用索引合并中的交集优化。engine_condition_pushdown:设置为 on 或 off,启用或禁用存储引擎条件下推优化。index_condition_pushdown:设置为 on 或 off,启用或禁用索引条件下推优化。mrr:设置为 on 或 off,启用或禁用多范围读取优化。mrr_cost_based:设置为 on 或 off,启用或禁用基于成本的多范围读取优化。block_nested_loop:设置为 on 或 off,启用或禁用块嵌套循环连接优化。batched_key_access:设置为 on 或 off,启用或禁用批量键访问优化。materialization:设置为 on 或 off,启用或禁用物化子查询优化。semijoin:设置为 on 或 off,启用或禁用半连接优化。loosescan:设置为 on 或 off,启用或禁用松散扫描优化。firstmatch:设置为 on 或 off,启用或禁用第一个匹配优化。duplicateweedout:设置为 on 或 off,启用或禁用重复剔除优化。subquery_materialization_cost_based:设置为 on 或 off,启用或禁用基于成本的子查询物化优化。use_index_extensions:设置为 on 或 off,启用或禁用索引扩展优化。condition_fanout_filter:设置为 on 或 off,启用或禁用条件扇出过滤优化。该优化用于减少在多表连接时的中间结果集大小,从而提高查询性能。derived_merge:设置为 on 或 off,启用或禁用派生表合并优化。派生表合并优化会将派生表(子查询)合并到外部查询中,从而避免创建临时表。use_invisible_indexes:设置为 on 或 off,启用或禁用使用不可见索引。不可见索引在查询优化器中被忽略,但仍然存在于表中。禁用该选项可以确保查询优化器不会使用这些索引。skip_scan:设置为 on 或 off,启用或禁用跳过扫描优化。跳过扫描优化允许在索引扫描时跳过不必要的行,从而提高查询性能。hash_join:设置为 on 或 off,启用或禁用哈希连接优化。哈希连接适用于等值连接,通过哈希表加速连接操作,通常在大表连接或无索引场景下性能更优。subquery_to_derived:设置为 on 或 off,启用或禁用子查询转换为派生表优化。该优化将某些子查询转换为派生表,使其能够参与更高效的连接和优化策略。prefer_ordering_index:设置为 on 或 off,启用或禁用优先使用排序索引优化。当查询包含 ORDER BY 子句时,优化器会优先考虑使用索引来避免排序操作。hypergraph_optimizer:设置为 on 或 off,启用或禁用超图优化器。超图优化器是 MySQL 8.0.22 引入的实验性优化器,用于处理更复杂的多表连接查询计划。derived_condition_pushdown:设置为 on 或 off,启用或禁用派生表条件下推优化。该优化将外部查询条件下推到派生表中,提前过滤数据以减少派生表的数据量。favor_range_scan:设置为 on 或 off,启用或禁用优先范围扫描优化。该优化会倾向于使用范围扫描而非全表扫描,即使范围扫描的成本估算略高,以提升查询稳定性。lazy_index_strategy:设置为 on 或 off,启用或禁用懒惰索引策略。懒惰索引策略会延迟索引的使用,直到确定索引确实有助于查询性能。limit_cond_pushdown:设置为 on 或 off,启用或禁用 LIMIT 条件下推优化。该优化会将 LIMIT 条件下推到子查询或视图中,从而减少处理的数据量,提高查询性能。pk_preload_pushdown:设置为 on 或 off,启用或禁用主键预加载下推优化。该优化将主键预加载操作下推到存储引擎层,减少回表次数,提升主键查询性能。force_batched_key_access:设置为 on 或 off,将带索引的连接都转成 batch rpc 的 bka 连接,减小 RPC 的数据量,提升性能。cost_based_hashjoin:设置为 on 或 off,是否将 hashjoin 的代价计算纳入到整体代价模型的计算中。bka_keep_order:设置为 on 或 off,启用或禁用 BKA Join 后的结果是否会保持和外表一致的顺序。开启该优化后,可以让 BKA Join 后,直接利用索引有序性避免排序,提升性能。bka_firstmatch:设置为 on 或 off,是否在 firstmatch 场景启动 BKA Join。icp_cost_aware:设置为 on 或 off,启用或禁用索引条件下推成本感知优化。该优化在代价估算时引入 ICP 过滤效果的调整因子,使优化器更准确地评估使用 ICP 时的实际扫描代价。join_runtime_filter:设置为 on 或 off,启用或禁用运行时过滤器(Runtime Filter)优化。该优化在 Hash Join 执行期间动态构建轻量的过滤器,并下推至 Probe 侧的存储引擎层提前过滤不满足连接条件的行,减少无效数据传输。skip_scan_pushdown:设置为 on 或 off,启用或禁用 Skip Scan 下推优化。该优化将 Skip Scan 的跳过逻辑下推到存储引擎层执行,减少 RPC 交互次数,提升跳跃扫描的性能。limit_aware_join_order:设置为 on 或 off,启用或禁用 LIMIT 感知的连接顺序优化。开启后优化器在选择多表连接顺序时,会优先选择能够尽早满足 LIMIT 行数限制的连接顺序,以减少中间结果集大小。prefer_wider_index:设置为 on 或 off,启用或禁用更宽索引后置选择优化。该优化控制优化器在基于范围统计信息选择索引时,启用"更宽索引后置选择"策略:优化器会在候选索引中优先选择包含列更宽的索引并做覆盖度校验,减少统计信息误差导致的索引选择错误。 |
生效范围 | GLOBAL SESSION |
是否重启生效 | 否 |