Finden Sie den Unterschied zwischen zwei großen Tabellen in PostgreSQL

8

Ich habe zwei ähnliche Tabellen in Postgres mit nur einem 32-Byte-lateinischen Feld (einfacher md5-Hash). Beide Tabellen haben ~ 30.000.000 Zeilen. Tabellen haben wenig Unterschied (10-1000 Zeilen sind unterschiedlich)

Ist es möglich, mit Postgres einen Unterschied zwischen diesen Tabellen zu finden, sollte das Ergebnis 10-1000 Zeilen sein, die ich oben beschrieben habe.

Das ist keine echte Aufgabe, ich möchte nur wissen, wie PostgreSQL mit JOIN-ähnlicher Logik umgeht.

    
odiszapc 11.03.2013, 02:46
quelle

3 Antworten

18

Die beste Option ist wahrscheinlich EXISTS Anti-Semi-Join:

tbl1 ist die Tabelle mit überzähligen Zeilen in diesem Beispiel:

%Vor%

Wenn Sie nicht wissen, welche Tabelle überzählige Zeilen oder beides hat, können Sie entweder die obige Abfrage nach dem Wechseln der Tabellennamen wiederholen oder:

%Vor%

Überblick über grundlegende Techniken in einem späteren Post:

Übrigens wäre es viel effizienter, % co_de zu verwenden % Spalten für MD5-Hashes:

Erwin Brandstetter 11.03.2013 07:12
quelle
0

Um vorhandene Antworten zu ergänzen, verwende ich die Funktion row() für die Join-Bedingung. So können Sie ganze Zeilen vergleichen. Z.B. Meine typische Abfrage, um die symmetrische Differenz zu sehen, sieht so aus

%Vor%     
ThomasH 20.03.2018 10:20
quelle
-1

Nach meiner Erfahrung dauert NOT IN mit einer Unterabfrage sehr lange. Ich würde es mit einem inklusiven Join machen:

%Vor%

Und dann dasselbe für den anderen Tisch umgekehrt.

    
0xCAFEBABE 11.03.2013 07:45
quelle