我發現,雖然編寫查詢奇的表現,這是原來的查詢(BTW 我使用MySQL 5.5.8)奇怪的慢行爲IN子句SQL
我需要做的是選擇id, a, b c,d
從所有元素(和元素的所有ocurrences)有現在2012-03-13 10:41:34.8431
(EG)之間插入一個時間(time
)新的元組也是屬性,這些元素必須有一些ocurrences的HAVING COUNT(id) >= '5'
SELECT id, a, b, c,d FROM table1 WHERE
id IN (SELECT id FROM table1 WHERE id IN (SELECT id FROM
table1 WHERE time >= '2012-03-13 10:41:34.8431' AND a = '1') HAVING COUNT(id) >= '5')
在table1
有aprox 700元組。該查詢持續14.5s
由於這是不能接受藉此長時間,我都分開只是querys測試:
SELECT id FROM table1 WHERE id IN (SELECT id FROM
table1 WHERE time >= '2012-03-13 10:41:34.8431' AND a = '1') HAVING COUNT(id) >= '5'
注意到0.025s,並返回一個元組id = 6
由於我知道結果,只是爲了測試我執行了查詢的另一部分:
SELECT id, a, b, c,d FROM table1 WHERE id IN (6)
並花了0.0012s
現在,會發生什麼呢?我不知道,只是一些毫無根據的猜測。爲什麼他們之間有如此多的區別?
如果這是正常的,是否有任何已知的workarrounds?
你能添加一個「explain」嗎? – 2012-03-13 12:43:23
你爲什麼在做「哪裏有身份證」?你不能把它當作一個查詢嗎? – 2012-03-13 12:44:01
嘗試此查詢'SELECT ID,a,b,c,d FROM table1 WHERE id IN(SELECT id FROM table1 WHERE time> ='2012-03-13 10:41:34.8431'AND a ='1')HAVING COUNT(id)> ='5' ' – 2012-03-13 12:48:52