Ich habe eine Insert-Select-Anweisung, die nur Zeilen einfügen muss, bei denen ein bestimmter Bezeichner der Zeile in keiner der beiden anderen Tabellen vorhanden ist. Welche der folgenden Möglichkeiten wäre schneller?
INSERT INTO Table1 (...)
SELECT (...) FROM Table2 t2
WHERE ...
AND NOT EXISTS (SELECT 'Y' from Table3 t3 where t2.SomeFK = t3.RefToSameFK)
AND NOT EXISTS (SELECT 'Y' from Table4 t4 where t2.SomeFK = t4.RefToSameFK AND ...)
... oder...
INSERT INTO Table1 (...)
SELECT (...) FROM Table2 t2
WHERE ...
AND t2.SomeFK NOT IN (SELECT RefToSameFK from Table3)
AND t2.SomeFK NOT IN (SELECT RefToSameFK from Table4 WHERE ...)
... oder leisten sie ungefähr dasselbe? Gibt es außerdem eine andere Möglichkeit, diese Abfrage zu strukturieren, die vorzuziehen wäre? Ich mag Unterabfragen im Allgemeinen nicht, da sie der Abfrage eine weitere "Dimension" hinzufügen, die die Laufzeit um polynomiale Faktoren erhöht.