MYSQL:使用union查询2个表非常慢,如何改进?

MYSQL:使用union查询2个表非常慢,如何改进?,mysql,select,union,Mysql,Select,Union,我想同时查询两个几乎相同行的表。因此,我希望获得按日期排序的5个最近条目,不管它们来自哪个表 到目前为止,我尝试了以下方法: SELECT date, name, text FROM `table_A` UNION SELECT date, name, text FROM `table_B` ORDER BY date desc LIMIT 5 不幸的是,这个查询大约需要20秒,两个表都有大约300.000行 当我这么做的时候: SELECT date, name, text FROM `

我想同时查询两个几乎相同行的表。因此,我希望获得按日期排序的5个最近条目,不管它们来自哪个表

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

SELECT date, name, text FROM `table_A` 
UNION 
SELECT date, name, text FROM `table_B` ORDER BY date desc LIMIT 5
不幸的是,这个查询大约需要20秒,两个表都有大约300.000行

当我这么做的时候:

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

查询只需要几毫秒


所以我的问题是:如何提高查询速度,或者应该使用什么select查询从两个表中获取最新的5行?

在合并它们之前,选择每个表中最近的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:每个派生表都必须有自己的别名。有什么建议吗?我已经添加了缺少的别名
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