Ich habe eine Tabelle (nennen wir es A) in SQL Server 2016, die ich abfragen möchte. Ich muss nur die Zeilen auswählen, die einen definitiven Status haben, daher muss ich einige Zeilen ausschließen. Es gibt eine weitere Tabelle (B), die die Datensatz-ID aus der Tabelle A und zwei Spalten, Spalte1 und Spalte2, enthält. Wenn diese Spalten nicht leer sind, kann der entsprechende Datensatz als endgültig betrachtet werden. Zwischen den Tabellen A und B besteht eine Eins-zu-eins-Beziehung. Da diese Tabellen ziemlich groß sind, möchte ich die effizienteste Abfrage verwenden. Welches sollte ich wählen?Welcher ist der schnellste Weg, um diese SQL-Abfrage auszuführen?
SELECT *
FROM TableA
WHERE record_id IN
(SELECT record_id FROM TableB WHERE col1 IS NOT NULL AND col2 IS NOT NULL)
SELECT a.*
FROM TableA a
INNER JOIN TableB b ON a.record_id = b.record_id
WHERE b.col1 IS NOT NULL AND b.col2 IS NOT NULL
SELECT a.*
FROM TableA a
INNER JOIN TableB b
ON a.record_id = b.record_id
AND b.col1 IS NOT NULL
AND b.col2 IS NOT NULL
Natürlich, wenn es einen noch schnelleren Weg gibt, an den ich nicht gedacht hätte, bitte teilen. Ich wäre auch sehr neugierig zu wissen, warum eine Abfrage schneller ist als die anderen.
Bitte lesen Sie Eric Lipperts exzellentes [Which is faster?] (Https://ericlippert.com/2012/12/17/performance-rant/): "... Wenn Sie zwei Pferde haben und wissen möchten, welche Von den beiden ist das schneller, als deine Pferde zu rasen. Schreibe keine kurzen Beschreibungen der Pferde, poste sie im Internet und frage zufällige Fremde, was schneller ist ... " –
Warum versuchst du es nicht und findest es aus? –
tat ich, aber die Ergebnisse variieren. Die Unterschiede sind ziemlich signifikant (~ 20%), aber die schnellere Abfrage ist nicht immer die gleiche ... –