MYSQL:使用union查询两个表的速度非常慢,如何提高速度?

3

我希望同时查询两个几乎相同的表格。结果,我想要获得最近的5个条目(总共按日期排序),无论它们来自哪个表格。

到目前为止,我尝试了以下方法:

SELECT date, name, text FROM `table_A` 
UNION 
SELECT date, name, text FROM `table_B` ORDER BY date desc LIMIT 5

不幸的是,这个查询大约需要20秒钟(两个表都有约30万行)。

当我只做以下操作时:

SELECT date, name, text FROM `table_A` ORDER BY date desc LIMIT 5

或者

SELECT date, name, text FROM `table_B` ORDER BY date desc LIMIT 5

查询只需要几毫秒。

所以我的问题是:我该如何改进查询以提高速度,或者应该使用哪种选择查询来获取两个表中的最新5行?

1个回答

4
选择每个表中最近的5行并将它们合并。
SELECT *
FROM (
    (SELECT date, name, text FROM table_A ORDER BY date DESC LIMIT 5) 
    UNION
    (SELECT date, name, text FROM table_B ORDER BY date DESC LIMIT 5)
) x
ORDER BY date DESC
LIMIT 5

您的查询存在问题,它首先合并整个表并删除重复项,然后才进行排序和限制。合并后的表没有索引,所以这部分很慢。

嘿,谢谢,但是这给了我错误#1248:每个派生表都必须有自己的别名。有什么建议吗? - knzo
我已经添加了缺失的别名。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接