0

Ich brauche kartesischen Produkt der beiden Tabellen MINUS Kombinationen, wo zwei Tabellen gleichen Wert in einem Feld haben. JetztWählen Sie ein kartesisches Produkt aus 2 Tabellen mit ungleich (<>) wo Bedingung; postgresql

SELECT 
    table1.field1, 
    table1.field2, 
    table2.field3, 
    table2.field4 
FROM 
    table1, table2 
WHERE 
    table1.field1 <> table2.field3; 

, nehmen wir an, dass Tabelle1 und Tabelle2 eine Million Datensätze haben je und dass Felder indiziert. Was ist der effizienteste Weg, das Resultset in angemessener Zeit abzurufen? Gibt es eine bessere Möglichkeit, diese Abfrage zu schreiben?

+0

Bitte beachten Sie NICHT GLEICHE Bedingung in Where-Klausel. Ich brauche ein kartesisches Produkt der beiden MINUS-Tabellen, wo zwei Tabellen in einem Feld denselben Wert haben. Vielen Dank. – zlatko

+5

Dies scheint eine sehr vernünftige Möglichkeit zu sein, ein kartesisches Produkt zu erzeugen, außer wenn zwei Felder gleich sind. – JNevill

+0

Dies ist ein Tera von Ergebnissen, 4 Tera von Feldern, der Inhalt von jedem Feld, wie viele Bytes? Wie viel RAM hast du? Können Sie das Ergebnis, wenn es in mehrere Teile aufgeteilt ist, vielleicht mit "AND t1.f1> 0 AND t1.f1 <= 100000" in zehn Schritten verwenden. Ist in einer der beiden Abfragen ein sequenzierter Schlüssel enthalten? Sie könnten die Spalten beider Tabellen (2 Megareihen) lesen und sie mit einer Programmiersprache kombinieren, aber vielleicht ist postgresql intelligent genug, um das Problem selbst zu lösen. –

Antwort

1

Der einzige Ansatz, den ich von anderen als die denken kann bereits in der Frage ist

SELECT 
    table1.field1, 
    table1.field2, 
    table2.field3, 
    table2.field4 
FROM 
    table1, table2 
EXCEPT -- Postgresql, MINUS in Oracle 
    SELECT 
    table1.field1, 
    table1.field2, 
    table2.field3, 
    table2.field4 
FROM 
    table1, table2 
WHERE field1=field3; 

Unter der Annahme, field1 und field3 indiziert sind, und dass die DB eine Optimierung für eine volle cartesianischen hat beizutreten, Diese könnte schneller sein, könnte es genau die gleiche Weise (Verwendung EXPLAIN) ausgeführt werden, und es könnte schlimmer sein!

Verwandte Themen