查询1:
SELECT a.name,a.id
FROM name_list AS a
WHERE a.created_time BETWEEN "2013-03-14 00:00:00" AND "2013-03-14 23:59:59"
查询2:
SELECT address_nr
FROM address_list
WHERE user_id="1117770"
LIMIT 1
要执行查询 1 和 2,我只需要 0.003 秒。但是当我将它们组合起来并将第二个查询作为子查询时,如下所示:
SELECT a.name,a.id,(SELECT address_nr FROM address_list WHERE user_id=a.id LIMIT 1) as 'address'
FROM name_list AS a
WHERE a.created_time BETWEEN "2013-03-14 00:00:00" AND "2013-03-14 23:59:59"
我需要 1 秒来执行它。当我检索数千条数据时,需要数千秒。
有人可以指导我吗?谢谢!
最佳答案
不要使用子查询,而是尝试连接。这应该明显更快:
SELECT a.name,a.id,b.address_nr address
FROM name_list a
LEFT JOIN address_list b ON a.id=b.user_id
WHERE a.created_time BETWEEN "2013-03-14 00:00:00" AND "2013-03-14 23:59:59"
子查询花费这么长时间的原因是因为它不仅仅运行两个查询,它还运行一个主查询和主查询结果集中每一行的子查询。如果表 a 有 1000 行,则您将运行 1001 个查询。
关于mysql - 组合两个快速查询会导致查询速度极慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401444/