0

我想加入三个表,然后合并它们。在联合的两个查询中,两个连接的表是相同的,执行两次连接似乎是一种浪费。请参阅下面的示例。这如何表现得最好?谢谢

SELECT t1.c1,t2.c1,t3.c1
FROM audits AS t1
INNER JOIN t2 ON t2.t1_id=t1.id
INNER JOIN t3 ON t3.t1_id=t1.id
WHERE t2.fk1=123
UNION
SELECT t1.c1,t2.c1,t4.c1
FROM audits AS t1
INNER JOIN t2 ON t2.t1_id=t1.id
INNER JOIN t4 ON t4.t1_id=t1.id
WHERE t2.fk1=123
ORDER BY t1.fk1 ASC
4

1 回答 1

0

如果 MySql 支持语法,这将起作用,并且可能会更有效:

SELECT t1.c1, t2.c1, t.c1
FROM audits AS t1
INNER JOIN t2 ON t2.t1_id=t1.id
INNER JOIN (
  select t1_id from t3
  union
  select t1_id from t4
) as t ON t.t1_id=t1.id
WHERE t2.fk1=123
ORDER BY t1.fk1 ASC

可能的性能改进的原因是被 UNION 的关系占用的空间更小;一列而不是 3。 UNION 消除重复项(与 UNION ALL 不同),因此必须对整个记录集合进行排序以消除重复项。

在元级别,此查询通知优化器可用的特定优化,它可能无法自行确定。

于 2013-04-10T04:11:09.780 回答