2011-05-17 81 views
3

我想联合到表和加入他们与第三个元数据表,我想知道哪种方法是最好的/最快的?
该数据库是PostgreSQL。
下面是我的两个建议,但其他方法是受欢迎的。PostgreSQL联盟两个表,并加入第三个表

要做到工会前加入两个表:

SELECT a.id, a.feature_type, b.datetime, b.file_path 
FROM table1 a, metadata b WHERE a.metadata_id = b.id 
UNION ALL 
SELECT a.id, a.feature_type, b.datetime, b.file_path 
FROM table2 a, metadata b WHERE a.metadata_id = b.id 

还是先做工会,然后做加盟:

SELECT a.id, a.feature_type, b.datetime, b.file_path 
FROM 
(
    SELECT id, feature_type, metadata_id FROM table1 
    UNION ALL 
    SELECT id, feature_type, metadata_id FROM table2 
)a, metadata b 
WHERE a.metadata_id = b.id 
+0

我在(人类)眼睛上发现第二个更容易。我通常会选择最“关系健全”的方法,或者最简单的方式来阅读和维护(通常是同样的事情,这不仅仅是巧合),除非它对另一个候选构造执行得非常糟糕。 – onedaywhen 2011-05-17 12:55:02

回答

5

运行在两个语句的EXPLAIN ANALYZE,那么你将看哪一个更有效。

1

由于sql-engine optimizator,它可能是不可预知的。最好看一下执行计划。最后两种方法可以以同样的方式

0

表示,只要我能记得,运行解释就会发现,PostgreSQL的解释为第一提供没有group by条款(显式或隐式的第二个因union而不是union all)在任何子查询中。