0

查询一:

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 秒来执行它。当我检索数千个数据时,它需要数千秒。

有人可以指导我吗?谢谢!

4

1 回答 1

2

尝试连接,而不是使用子查询。这应该明显更快:

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 个查询。

于 2013-03-14T04:56:37.200 回答