我想,我可能有一种误解,联接如何在多个表上运行。假设您有三个表A,B,C,您需要加入它们。
这是V1
SELECT A.NAME AS name1
,B.NAME AS name2
,C.NAME AS name3
FROM A
INNER JOIN B
ON A.id = B.id
INNER JOIN C
ON B.id = C.id
这是V2
SELECT A.NAME AS name1
,D.NAME AS name2
,D.NAME AS name3
FROM A
INNER JOIN (
SELECT B.NAME AS name2
,C.NAME AS name3
FROM B
INNER JOIN C
ON B.id = C.id
) AS D
ON A.id = D.id
这两个版本之间有任何性能差异吗? 即使第一个查询看起来更干净,我也需要构建一个Query Builder UI,将连接限制为只有2个表有帮助。
答案 0 :(得分:1)
一般来说,子选择的一个问题是它可能需要RDBMS创建一个临时表来完成子选择 - 并且在足够大的表上这可能是一个严重的开销 - 并且可能无法使用任何索引在子选择上优化查询,然后您扫描表格。
当然,DDL和表格的大小都不包含在内,所以最好的方法是让Postgres解释它打算做什么,比较/对比。