请选择 进入手机版 | 继续访问电脑版

爱分享吧

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1243|回复: 0

MySQL参数eq_range_index_dive_limit的作用以及如何理解index dive?

[复制链接]

75

主题

75

帖子

1058

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1058
发表于 2019-10-31 22:54:53 | 显示全部楼层 |阅读模式
MySQL参数eq_range_index_dive_limit的作用以及如何理解index dive?
首先解释一下什么是index dive:
在MySQL里只要存在范围查找方法,就可以通过索引下潜来估计范围内的行数,方法是找出范围的开始和结束,并计算出他们之间的行数。这项技术更精确,所以也是制定良好执行计划的一个基础。

而参数eq_range_index_dive_limit限定了进行索引下潜的等值条件的最大值+1,
1、当等值条件个数大于或等于eq_range_index_dive_limit,那么优化器将直接使用统计信息
2、当eq_range_index_dive_limit设置为0时,优化器将始终进行索引下潜,而不用索引统计信息

例如有如下SQL:
select * from t where col_name IN(val1, ..., valN),当eq_range_index_dive_limit为N+1,优化器就会使用index dive来计算执行计划cost

index dive适用条件有以下形式
1、col_name IN(val1, ..., valN)
2、col_name = val1 OR ... OR col_name = valN
col_name为非唯一索引

8.0以后优化器在满足以下条件可能会跳过index dive,而8.0以前无法避免index dive:
1、查询时只访问一张表,而不是多表关联
2、force index(某个索引)
3、没有子查询
4、没有涉及全文索引
5、没有GROUP-BY or DISTINCT
6、没有ORDER-BY


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|爱分享吧

GMT+8, 2021-4-14 13:26 , Processed in 0.090978 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表