MySQL参数eq_range_index_dive_limit

eq_range_index_dive_limit 参数:

  • 作用范围:global & session
  • 默认值:200
  • 最小值:0
  • 最大值:4294967295

eq_range_index_dive_limit 参数提供了一个阈值,优化器在估算扫描行数时,会根据这个参数,来决定估算策略。通常优化器有两种估算策略,索引统计和索引下潜(index dives)。

  • 索引统计使用的是采样的统计信息,执行速度较快,但是统计数据不准确。
  • 索引下潜通过调用引擎接口,能够获取到更准确的估算数据,但是执行成本较高,比较耗时。

优化器在选择策略时,会参考eq_range_index_dive_limit参数的值与where条件中范围相等比较的个数。比如下面两个条件:

col_name IN(val1, …, valN)
col_name = val1 OR … OR col_name = valN

in子句中元素的数量,以及 or 子句两边的数量,当这个数量超过 eq_range_index_dive_limit 阈值时,优化器选择使用索引统计,否则优化器选择索引下潜。

当 eq_range_index_dive_limit 设置为0时,优化器始终使用索引下潜。

发表评论