我有类似以下内容:
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。