我在Postgres中有兩個類似的表,只有一個32字節的拉丁字段(簡單md5哈希)。 兩個表都有〜30,000,000行。表格差別不大(10-1000行不同)在PostgreSQL中查找兩個大表之間的差異
Postgres是否可以找到這些表格之間的差異,結果應該是我上面描述的10-1000行。
這不是一個真正的任務,我只是想知道PostgreSQL如何處理JOIN類邏輯。
我在Postgres中有兩個類似的表,只有一個32字節的拉丁字段(簡單md5哈希)。 兩個表都有〜30,000,000行。表格差別不大(10-1000行不同)在PostgreSQL中查找兩個大表之間的差異
Postgres是否可以找到這些表格之間的差異,結果應該是我上面描述的10-1000行。
這不是一個真正的任務,我只是想知道PostgreSQL如何處理JOIN類邏輯。
最好的選擇可能是一個EXISTS
反半連接:
tbl1
是在這個例子中的剩餘行的表:
SELECT *
FROM tbl1
WHERE NOT EXISTS (SELECT 1 FROM tbl2 WHERE tbl2.col = tbl1.col);
如果你不知道哪個表有剩餘行或者都有,您可以重複上面的查詢交換表的名稱後,或:
SELECT *
FROM tbl1
FULL OUTER JOIN tbl2 USING (col)
WHERE tbl2 col IS NULL OR
tbl1.col IS NULL;
在概述在以後的文章基本技術:
BTW,這將是多更有效地使用uuid
列MD5哈希值:
根據我的經驗,不在子查詢中需要很長時間。我會這樣做一個包容的加入:
DELETE FROM table1 where ID IN (
SELECT id FROM table1
LEFT OUTER JOIN table2 on table1.hashfield = table2.hashfield
WHERE table2.hashfield IS NULL)
然後做另一種方式相同的另一個表。
請注意,NOT NOT與「NOT EXISTS」在本質上不同。 NULL處理是不同的,這使'NOT IN'更加昂貴。 – 2013-03-11 16:59:51
看看這個[如何比較postgres中的兩個表](http://stackoverflow.com/questions/4814597/how-to-compare-two-tables-in-postgres),這加快了差異[如何加快表之間的差異?](http://stackoverflow.com/questions/6337871/how-can-i-speed-up-a-diff-between-tables) – static 2013-03-11 02:49:20
那麼你有你的答案嗎? – 2015-04-29 02:03:41
是:Hadoop .... – odiszapc 2015-05-01 10:00:18