optimizer_switch

最近更新时间:2026-03-23 14:47:03

我的收藏

功能描述

optimizer_switch用于设置优化器指示选项开关。

属性说明

属性
说明
参数类型
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
取值范围
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 的代价计算纳入到整体代价模型的计算中。
生效范围
GLOBAL
SESSION
是否重启生效