我想加入三个表然后联合起来。连接的两个表在联合的两个查询中是相同的,并且执行此连接两次似乎是浪费。请参阅下面的示例。这最佳表现如何?感谢
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
答案 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不同),因此必须对整个记录集进行排序以消除重复。
在元级别,此查询会通知优化程序可用的特定优化,它可能无法确定它自己的优化。