mysql`选择'查询中的位置如何工作?为什么参数越大速度越快?
我正在用SELECT WHERE IN进行查询,发现了一些不可预测的情况mysql`选择'查询中的位置如何工作?为什么参数越大速度越快?,mysql,algorithm,select,Mysql,Algorithm,Select,我正在用SELECT WHERE IN进行查询,发现了一些不可预测的情况 从tbl1中选择a、b、c,其中a位于(a1、a2、a3…、a5000)-->此查询耗时1.7ms 从tbl1中选择a、b、c,其中a位于(a1、a2、a3…、a20)-->此查询耗时6.4ms IN的算法是什么?为什么较大的参数比较小的参数快?下面是一个猜测 对于每个SQL查询,优化器都会分析查询以选择要使用的索引 对于多值范围查询(如(…)中的),优化器会对短列表中的每个值执行“索引下降”,试图估计使用索引是否是一个好
从tbl1中选择a、b、c,其中a位于(a1、a2、a3…、a5000)
-->此查询耗时1.7ms从tbl1中选择a、b、c,其中a位于(a1、a2、a3…、a20)
-->此查询耗时6.4msIN的算法是什么?为什么较大的参数比较小的参数快?下面是一个猜测 对于每个SQL查询,优化器都会分析查询以选择要使用的索引 对于多值范围查询(如(…)中的
),优化器会对短列表中的每个值执行“索引下降”,试图估计使用索引是否是一个好主意。如果要搜索太常见的值,只需扫描表就更有效,因此无需使用索引
MySQL 5.6引入了一个特殊的优化,如果使用长列表,可以跳过索引潜水。相反,它只是根据存储的索引统计信息猜测a
列上的索引可能值得使用
您可以使用eq\u range\u index\u dive\u limit
选项控制列表的长度使优化器跳过索引跳转。默认值为10。您的示例显示了一个长度为20的列表,因此我不确定它为什么更贵
请在此处阅读有关此功能的手册: