昆仑-昆仑娱乐-注册登录站

昆仑-昆仑娱乐-注册登录站 咨询热线:

昆仑新闻 >>当前位置: 首页 > 昆仑新闻

MySQL 常用配置变量- optimizer_switch

时间:2024-04-15 12:36:22

控制查询优化器优化行为的参数(>=5.6.9 版本)

  •  
  • 该参数有众多子选项,全局,会话,动态变量,set 类型,全局默认值可以在服务器启动时设置,默认值为:index_merge=on,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=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,subquery_materialization_cost_based=on,use_index_extensions=on
  • 每个标签有三个有效值:* default:重置该子选项为 server 默认值,在你经过一些修改之后不记得默认值是什么的时候有用。* on: 开启该子选项对应的优化器行为。* off:关闭该子选项对应的优化器行为。
  • 以下是每个标签(子选项)的含义如下表(所有子选项中,在5.6.9 之后的版本默认值只有 batched_key_access 才是 OFF,而 BKA 特性对于 join 查询有帮助,所以建议默认开启,要注意,目前基于成本的 MRR 估算太悲观,所以要使用 MRR 和BKA,必须要将 mrr_cost_based 设置为 OFF,即 5.6.x 版本中除了 mrr_cost_based 建议设置为 OFF 之外,其他的子选项都建议设置为 ON):
优化特性名标志名称含义默认值
批量键访问batched_key_access控制是否开启
BKA 连接算法
OFF
块嵌套循环block_nested_loop控制是否开启
BNL 连接算法
ON
引擎条件下推engine_condition_pushdown控制是否开启
引擎条件下推
ON
索引条件下推index_condition_pushdown控制是否开启
索引条件下推
ON
索引扩展use_index_extensions控制是否开启
索引扩展优化
ON
索引合并index_merge控制是否开启
所有的索引合
并优化特性
ON
index_merge_intersection控制是否开启
索引合并交集
查询优化
ON
index_merge_sort_union控制是否开启
索引合并排序
联合查询优化
ON
index_merge_union控制是否开启
索引合并联合
查询优化
ON
多范围读取mrr控制是否开启
多范围读取优
化策略
ON
mrr_cost_based如果 mrr =
on,则该子选
项控制是否开
启基于成本的
MRR 优化策略
ON
半连接semijoin控制是否开启
所有半连接查
询优化策略
ON
firstmatch控制是否开启
半连接
FirstMatch 优
化策略
ON
loosescan控制是否开启
半连接
LooseScan 优
化策略(不要
与用于 GROUP
BY 的
LooseScan 混
淆,这里的是
用于 semijoin
查询的
LooseScan)
ON
物化子查询materialization控制是否开启
物化查询(包
括半连接物化
查询)
ON
subquery_materialization_cost_based控制是否开启
基于成本的物
化子查询选择
ON

?

?

  • 控制查询优化器优化行为的参数(>=5.7.8 版本)
  • 与 5.6 类似,以下列出 5.7 中的默认值,与 5.6 相同的选项就不再列举,只列出 5.7 新增的优化器策略,5.7 默认值为:index_merge=on,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=on,block_nested_loop=on,batched_key_access=off,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
  • 以下列出 5.7.8 以上的 5.7.x 版本中与 5.6.9 以上的 5.6.x 版本中相比多出来的查询优化器策略:
    • duplicateweedout:控制半连接重复 Weedout 策略是否开启。
    • condition_fanout_filter:控制在计算查询优化器代价时,是否计算条件过滤的策略(5.7 在代价类型上分为 io,cpu 和 me,mysql 5.7 代价计算相对之前的版本有较大的改进。例如 * 代价模型参数可以动态配置,可以适应不同的硬件 * 区分考虑数据在内存和在磁盘中的代价 * 代价精度提升为浮点型 * jion 计算时不仅要考虑 condition,还要考虑 condition 上的 filter,此参数就是控制是否使用 condition 上的 filter 。
    • derived_merge:控制是否将派生表和视图合并到外部查询块中。
  • 如果在 join 查询中,开启了 BKA 特性,驱动表有排序字段,且 where条件与排序字段是一个联合索引时,可能导致驱动表执行计划中出现'Using temporary; Using filesort',此时请关闭 BKA 特性,关闭之后驱动表使用 ICP 特性进行数据过滤(开启 BKA 无法使用索引排序的原因是:BKA 是先根据 where 条件在二级索引中找出符合的主键字段值,再在 join buffer 里面根据主键排序,然后使用主键再去 join 被驱动表,如果驱动表有二级索引的排序字段,那么此时就无法再使用二级索引进行排序了),BKA 特性如果在驱动表没有按照二级索引排序时,可以打开,该特性默认关闭。
返回
Copyright © 2012-2018 昆仑-昆仑娱乐-注册登录站  电话:0898-08980898
地址:海南省海口市  ICP备案编号:琼ICP备xxxxxxxx号
找我

全国统一服务热线7*24小时为您在线服务

平台注册入口