Finden Sie Unterschied zwischen zwei großen Tabellen in PostgreSQL
Habe ich zwei ähnliche Tabellen in Postgres nur mit einer 32-byte-Latein-Feld (einfach md5-hash).
Beide Tabellen haben ~30,000,000 Zeilen. Tabellen haben nur wenig Unterschied (10-1000 ó Zeilen, die anders sind)
Ist es möglich, mit Postgres einen Unterschied zu finden zwischen diesen Tabellen, das Ergebnis sollte 10-1000 ó Zeilen, die ich oben beschrieben habe.
Dies ist nicht eine echte Aufgabe, ich will einfach nur, um zu wissen, wie PostgreSQL beschäftigt sich mit der JOIN-mag-Logik.
- schauen Sie auf diese gewusst Wie: vergleichen von zwei Tabellen in postgres und dies, um die Geschwindigkeit des diff Wie kann ich speed up einen diff zwischen den Tabellen?
- So haben Sie Ihre Antwort?
- Ja: Hadoop....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die beste option ist wahrscheinlich eine
EXISTS
anti-semi-join:tbl1
ist die Tabelle mit den überzähligen Zeilen in diesem Beispiel:Wenn Sie nicht wissen, welche Tabelle überschuss Zeilen oder beides haben, Sie können entweder wiederholen Sie die obige Abfrage nach dem einschalten Tabellennamen, oder:
Überblick über grundlegende Techniken in einem späteren Beitrag:
BTW, es wäre viel effizienter zu nutzen
uuid
Spalten für md5-hashes:Zu ergänzen, die vorhandene Antworten, die ich verwenden
row()
Funktion für die join-Bedingung. Diese können Sie vergleichen, ganze Zeilen. E. g. meine typische Abfrage zu sehen, die symmetrische Differenz sieht so ausMeiner Erfahrung, NICHT mit einer Unterabfrage dauert eine sehr lange Zeit. Ich würde es tun, mit ein inclusive join:
Und dann das gleiche Umgekehrt für die andere Tabelle.
NOT IN
unterscheidet sich prinzipiell vonNOT EXISTS
.NULL
handling ist anders, was machtNOT IN
teurer.