线上某系统遇到了in查询慢的问题,而且in里面的元素只有10个,百思不得其解,接口原来1ms的响应时间,加了这个sql为何变成了200ms,随后破案了。

因为mysql有个系统参数range_eq_range_index_dive_limit,5.6版本默认为10,超过10以后可能导致走错误的执行计划,5.7默认为200,目前已知:

正常情况下我们在使用in查询的时候都会走索引,但是数据库的eq_range_index_dive_limit属性会影响mysql优化器的选择mysql官方没给出具体会受到影响的情况,但是给出了eq_range_index_dive_limit不生效的情况

* single-index FORCE INDEX index
唯一索引使用强制索引方式不受eq_range_index_dive_limit影响,否则受影响
* The index is nonunique and not a FULLTEXT
index.非唯一索引和非全文索引不受eq_range_index_dive_limit影响
* No subquery is present. 不存在子查询的情况不受eq_range_index_dive_limit影响
* No DISTINCT, GROUP BY, or ORDER BY clause is present. 不存在DISTINCT、GROUP
BY或ORDER BY子句不受eq_range_index_dive_limit影响

技术
今日推荐
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信