Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql`选择'查询中的位置如何工作?为什么参数越大速度越快?_Mysql_Algorithm_Select - Fatal编程技术网

mysql`选择'查询中的位置如何工作?为什么参数越大速度越快?

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查询,优化器都会分析查询以选择要使用的索引 对于多值范围查询(如(…)中的),优化器会对短列表中的每个值执行“索引下降”,试图估计使用索引是否是一个好

我正在用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查询,优化器都会分析查询以选择要使用的索引

    对于多值范围查询(如(…)中的
    ),优化器会对短列表中的每个值执行“索引下降”,试图估计使用索引是否是一个好主意。如果要搜索太常见的值,只需扫描表就更有效,因此无需使用索引

    MySQL 5.6引入了一个特殊的优化,如果使用长列表,可以跳过索引潜水。相反,它只是根据存储的索引统计信息猜测
    a
    列上的索引可能值得使用

    您可以使用
    eq\u range\u index\u dive\u limit
    选项控制列表的长度使优化器跳过索引跳转。默认值为10。您的示例显示了一个长度为20的列表,因此我不确定它为什么更贵

    请在此处阅读有关此功能的手册: