有效地组合两个查询,两者都有一个共同的内连接

时间:2013-04-09 23:29:49

标签: mysql sql

我想加入三个表然后联合起来。连接的两个表在联合的两个查询中是相同的,并且执行此连接两次似乎是浪费。请参阅下面的示例。这最佳表现如何?感谢

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

1 个答案:

答案 0 :(得分: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不同),因此必须对整个记录集进行排序以消除重复。

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