MYSQL:联合查询2表很慢,如何提高?
问题描述:
我想同时查询两个表(几乎)相同的行。其结果是,我想要得到的5个最近条目(按日期排序,在总),无论从哪个表他们从MYSQL:联合查询2表很慢,如何提高?
到目前为止,我尝试这样做:
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 date, name, text FROM `table_B` ORDER BY date desc LIMIT 5
查询只需几毫秒。
所以我的问题是:我该如何改进我的查询更快或选择查询应该用什么来从两个表中获取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:每个派生表都必须有自己的别名。有什么建议么? – knzo
我已添加缺少的别名 – Barmar