下面的查询使用一个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约束进行比较。有什么想法吗?
答案 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;