Squicky
Lt. Commander
- Registriert
- Sep. 2002
- Beiträge
- 1.422
Hallo
Beide folgende sql select Befehle liefert das richtige und gleiche Ergebnis.
Die Tabellen t1 und t2 haben die gleichen Spalten (id, a, b, …, g).
Gesucht sind die Zeilen in t1, die nicht in t2 vorhanden sind.
Das erste Beispiel vergleich die zwei Tabellen nur mit der Spalte a und braucht ca. 1 bis 2 Sekunden ; das Ergebnis sind 0 Zeilen.
Das zweite Beispiel vergleich die zwei Tabellen mit allen Spalte und braucht mind. 20 Sekunden ; das Ergebnis sind 0 Zeilen.
Das zweite Beispiel braucht wahrschein so viel länger, weil alle Spalten vergleichen werden.
Oder was könnte der Grund für die längere Laufzeit von Beispiel 2 sein?
Wenn dies so ist, warum werden überhaupt Spalten b bis g im zweitem Beispiel verglichen? Denn Spalte a ist immer ungleich, somit sollten die weiteren Spalten gar nicht erst verglichen werden müssen.
Optimierungsversuch:
Wie kann man das zweite Beispiel ändern, so dass Spalten b nur verglichen wird, wenn Spalten a gleich sind?
Danke
P.S. Benutzt wird Microsoft SQL 2016
Beide folgende sql select Befehle liefert das richtige und gleiche Ergebnis.
Die Tabellen t1 und t2 haben die gleichen Spalten (id, a, b, …, g).
Gesucht sind die Zeilen in t1, die nicht in t2 vorhanden sind.
Das erste Beispiel vergleich die zwei Tabellen nur mit der Spalte a und braucht ca. 1 bis 2 Sekunden ; das Ergebnis sind 0 Zeilen.
Das zweite Beispiel vergleich die zwei Tabellen mit allen Spalte und braucht mind. 20 Sekunden ; das Ergebnis sind 0 Zeilen.
SQL:
SELECT t1.*
FROM t1
LEFT OUTER JOIN t2
ON t1.a = t2.a
WHERE t2.id IS NULL
SQL:
SELECT t1.*
FROM t1
LEFT OUTER JOIN t2
ON t1.a = t2.a
AND t1.b = t2.b
AND t1.c = t2.c
AND t1.d = t2.d
AND t1.e = t2.e
AND t1.f = t2.f
AND t1.g = t2.g
WHERE t2.id IS NULL
Das zweite Beispiel braucht wahrschein so viel länger, weil alle Spalten vergleichen werden.
Oder was könnte der Grund für die längere Laufzeit von Beispiel 2 sein?
Wenn dies so ist, warum werden überhaupt Spalten b bis g im zweitem Beispiel verglichen? Denn Spalte a ist immer ungleich, somit sollten die weiteren Spalten gar nicht erst verglichen werden müssen.
Optimierungsversuch:
Wie kann man das zweite Beispiel ändern, so dass Spalten b nur verglichen wird, wenn Spalten a gleich sind?
Danke
P.S. Benutzt wird Microsoft SQL 2016