我想用(几乎)相同的行同时查询两个表。因此,我希望得到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行?
发布于 2017-10-17 15:49:08
在组合表之前,在每个表中选择最近的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查询的问题是,在执行排序和限制之前,首先要合并整个表并移除重复的表。合并的表没有索引,所以这个部分很慢。
https://stackoverflow.com/questions/46794089
复制相似问题