MYSQL:用union查询2个表很慢,如何改进?
Posted
技术标签:
【中文标题】MYSQL:用union查询2个表很慢,如何改进?【英文标题】:MYSQL: Query 2 tables with union is very slow, how to improve? 【发布时间】:2018-03-29 09:04:22 【问题描述】:我想同时查询 2 个具有(几乎)相同行的表。结果,我想获取最近的 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 date, name, text FROM `table_B` ORDER BY date desc LIMIT 5
查询只需要几毫秒。
所以我的问题是:我怎样才能提高我的查询速度,或者我应该使用什么选择查询从两个表中获取最新的 5 行?
【问题讨论】:
【参考方案1】:在合并之前选择每个表中最近的 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:每个派生表都必须有自己的别名。有什么建议吗? 我添加了缺少的别名以上是关于MYSQL:用union查询2个表很慢,如何改进?的主要内容,如果未能解决你的问题,请参考以下文章