mysql - 组合两个快速查询会导致查询速度极慢

标签 mysql

查询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/

相关文章:

MYSQL返回每组的最大值

php - 在相同单词有空格和无空格的两种条件下查找查询结果

php - 如何将表单输入设置为 Json 打印 php 文件中的变量?

mysql - 将数据存储在代表各个数据类型的表中 - 为什么这是错误的?

mysql - Rails 的 update_all 方法将错误的时间保存到 MySQL DB 中

MySQL 查询错误#1064?

php - 计算二进制 PHP MYSQL 中的左用户数

mysql - 本周观看次数最多的视频

php - 将结果行的列作为数组返回,可以通过 codeigniter/active record 中的索引引用

php - 为变量设置值