【发布时间】:2020-12-21 20:40:10
【问题描述】:
我在 mysql 中有一个带有 2 个 select from 的查询。当我单独运行这些查询时,它们会在 1 秒内快速运行。但是当我将它们与 union all 结合使用时,网站会冻结,并且在 union all 中执行相同的查询至少需要 20 秒。
知道为什么会这样吗?想不通。
请参阅下面的查询:
SELECT p.user_id, p.description, p.post_id, p.created_at, ps.username AS size_name, ps.username AS user_name, ps.avatar AS avatar, pz.title AS title, pz.slug AS slug
FROM comments p
JOIN users ps ON ps.id = p.user_id
JOIN posts pz ON pz.id = p.post_id
UNION ALL
SELECT p2.user_id, p2.description, p2.post_id, p2.created_at, ps2.username AS size_name, ps2.username AS user_name, ps2.avatar AS avatar, pz2.title AS title, pz2.slug AS slug
FROM reply p2
JOIN users ps2 ON ps2.id = p2.user_id
JOIN posts pz2 ON pz2.id = p2.post_id
order by created_at DESC
LIMIT 10
【问题讨论】:
-
每个子查询返回多少行?
-
@Barmar 每个大约 2M。
-
首先在每个 SELECT 中执行 ORDER BY 和 LIMIT 10。然后也对 UNION ALL 结果执行此操作。
-
您的问题是 ORDER BY 子句。 UNION 需要获取所有记录,然后对它们进行排序。
标签: mysql sql join select union-all