Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/135.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_Indexing - Fatal编程技术网

Mysql 为什么';使用索引条件';即使条件在索引内?

Mysql 为什么';使用索引条件';即使条件在索引内?,mysql,indexing,Mysql,Indexing,有一个使用两列的慢速查询,所以决定添加一个复合索引并改变排序。现在效果很好。执行时间从将近一分钟下降到不到一秒。但是explain输出仍然显示“使用索引条件”。为什么? 查询: SELECT * FROM TableA WHERE source = 'book' AND uuid = 999 ORDER BY uuid ASC; 表列: 索引: 解释输出: 解释并分析输出: ->使用source_uid_Index(source='book')在表A上进行索引查找,索引条件为:(

有一个使用两列的慢速查询,所以决定添加一个复合索引并改变排序。现在效果很好。执行时间从将近一分钟下降到不到一秒。但是
explain
输出仍然显示“使用索引条件”。为什么?

查询:

SELECT * 
FROM TableA 
WHERE source = 'book' AND uuid = 999 
ORDER BY uuid ASC;

表列:

索引:

解释输出:

解释并分析输出:

->使用source_uid_Index(source='book')在表A上进行索引查找,索引条件为:(table.uuid=999)(成本=33679.16行=170038)(实际时间=57.279..57.384行=4个循环=1)

解释数据说它使用的是综合指数,这是有道理的。然而,解释分析也会说“
带有索引条件:(table.uuid=999)


为什么它使用
uuid
作为“索引条件”,在
source
旁边的索引中使用uuid?

我找到了原因。
uuid
列的类型为
varchar
。所以我问错了。这是正确的查询:

SELECT * 
FROM TableA 
WHERE source = 'book' AND uuid = '999'
ORDER BY uuid ASC;
解释输出:

你的意思是它为什么使用非综合指数?我想如果是这样的话,可能是因为你是按单个字段排序的。它实际上使用了复合索引,源索引不是应该用在where过滤中吗?这两种方法都在过滤,所以使用复合索引不是很自然吗?没错。那真的很好。“解释输出”上的“额外”列的值令我恼火。结果发现问题出在查询本身。uuid是一个varchar而不是int。谢谢你的帮助。@DavidS-你的自我回答才是真正的解决方案。很高兴你找到了它;我错过了。