MySQL GROUP_CONCAT极其缓慢,有多个约束但快速有一个

时间:2014-05-21 17:13:06

标签: mysql sql

下面的查询使用一个ID

运行得非常快(少于1秒)
SELECT ID, GROUP_CONCAT(CODE SEPARATOR ' ') 
FROM TABLE
WHERE TYPE='A' AND ID IN ( 1 )
GROUP BY ID;

但是当使用多个ID运行时非常慢(超过10秒)

SELECT ID, GROUP_CONCAT(CODE SEPARATOR ' ')
FROM TABLE
WHERE TYPE='A' AND ID IN (1, 2)
GROUP BY ID;

我认为这是因为MySQL首先尝试对所有ID执行GROUP_CONCAT,然后将其与IN约束进行比较。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

第一个查询的Boolean逻辑与第二个查询不同。

First  = TYPE = ('A' AND ID = 1) OR ID = 2

Second = TYPE = 'A' AND (ID = 1 OR ID = 2)

http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

答案 1 :(得分:0)

我解决了这个问题。 (感谢你们带路。)

MySQL在第二个查询中使用了错误的TYPE_IDX索引,并且有多个ID。当我指定使用ID_IDX时,查询现在要快得多:

SELECT ID, GROUP_CONCAT(CODE SEPARATOR ' ')
FROM TABLE
USE INDEX (ID_IDX)
WHERE TYPE='A' AND ID IN (1, 2)
GROUP BY ID;