MYSQL:使用union查询2个表非常慢,如何改进?
我想同时查询两个几乎相同行的表。因此,我希望获得按日期排序的5个最近条目,不管它们来自哪个表 到目前为止,我尝试了以下方法: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 `
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