【发布时间】:2009-04-06 21:07:11
【问题描述】:
我有类似以下内容:
SELECT c.id
FROM contact AS c
WHERE c.id IN (SELECT s.contact_id
FROM sub_table AS s
LEFT JOIN contact_sub AS c2 ON (s.id = c2.sub_field)
WHERE c2.phone LIKE '535%')
ORDER BY c.name
问题是查询花费了非常非常长的时间(> 2分钟),但是如果我采用子查询,单独运行它,内爆 id 并将它们插入到主查询中,它的运行时间不到 1第二,包括数据检索和内爆。
我已经检查了有关方法和键的说明是否正确使用并且方式相同。子查询返回的 ID 不超过 200 个。
什么可能导致子查询方法花费这么长时间?
顺便说一句,我知道上面的查询可以用连接编写,但我的查询不能——这只是一个简化版本。
使用 MySQL 5.0.22。
【问题讨论】:
-
您能否指定您正在使用的 MySQL 服务器的确切版本?
-
谢谢,现在我们正在取得进展。我在我的一个上运行 5.0.24,足够接近。检查一些测试用例,看看那里是否也存在 6.0 alpha 错误。
-
... 显然不是。奇怪的。您仍然可以根据您的查询检查该错误报告中的示例查询(和解决方法)吗?您的样本看起来与优化器在报告的样本几乎相同。