我想從多個表中檢索id
的完整列表,它們可以完全重疊或相互排斥。我想知道哪個會有更好的性能,哪個是PostgreSQL的正確途徑,爲什麼會這樣呢?PostgreSQL:選擇不同的ID聯合與選擇ID完全聯接
說我有4個表,和表索引爲優化:
[SELECT DISTINCT ... UNION]
SELECT DISTINCT id from table1
UNION
SELECT DISTINCT id from table2
UNION
SELECT DISTINCT id from table3
UNION
SELECT DISTINCT id from table4
;
[SELECT ... FULL JOIN]
SELECT DISTINCT coalesce(a.id, b.id, c.id, d.id) AS id
FROM table1 a
FULL JOIN table2 b on a.id=b.id
FULL JOIN table3 c on b.id=c.id
FULL JOIN table4 d on c.id=d.id
;
這裏做了一些調整。感謝@ Hogan在他的回答中的建議。
注意
我對full join
整個動機是因爲id
字段可以表之間的完全重疊。 full join
可能會緩解一些表掃描。
這些不一樣 – Hogan
沒有必要用'UNION'區分。 'UNION'返回不同的值。 'UNION ALL'返回所有值 – lad2025
@ lad2025。 。 。沒有必要,但是在某些情況下,它可以產生更好的執行計劃(即,當索引可以用於子查詢中的「distinct」)時。也就是說,這兩個查詢是不相同的,所以我懷疑OP是否知道這個細微差別。 –