我发现,虽然编写查询奇的表现,这是原来的查询(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