我希望与表联合并将它们与第三个元数据表连接起来,我想知道哪种方法最好/最快?
数据库是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 :(得分:7)
在两个语句上运行EXPLAIN ANALYZE,然后您将看到哪一个更有效。
答案 1 :(得分:1)
由于sql-engine优化器,它可能无法预测。最好看一下执行计划。最后两种方法都可以用同样的方式表示
答案 2 :(得分:0)
在我记忆中,运行Explain将揭示PostgreSQL将第二个解释为第一个,只要没有group by
子句(由于{{显式或隐式)在任何子查询中都有1}}而不是union
。