NOT IN vs. NOT EXISTS
Welche dieser Abfragen ist die schnellere?
NOT EXISTS:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE NOT EXISTS (
SELECT 1
FROM Northwind..[Order Details] od
WHERE p.ProductId = od.ProductId)
Oder NOT IN:
SELECT ProductID, ProductName
FROM Northwind..Products p
WHERE p.ProductID NOT IN (
SELECT ProductID
FROM Northwind..[Order Details])
Der Abfrageausführungsplan sagt, dass beide das Gleiche tun. Wenn das der Fall ist, welche Form ist dann die empfohlene?
Dies basiert auf der NorthWind-Datenbank.
[Bearbeiten]
Ich habe gerade diesen hilfreichen Artikel gefunden: http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx
Ich denke, ich werde bei NOT EXISTS bleiben.
502
3
Wenn der Ausführungsplaner sagt, dass sie gleich sind, sind sie gleich. Verwenden Sie denjenigen, der Ihre Absicht deutlicher macht - in diesem Fall den zweiten.
Ich glaube sogar, dass dies der schnellste Weg wäre:
Es kommt darauf an...
wäre nicht relativ langsam die isn't viel zu begrenzen Größe dessen, was die Abfrage überprüfen, um zu sehen, wenn sie Schlüssel ist in. EXISTS wäre in diesem Fall vorzuziehen.
Aber, abhängig von der DBMS's Optimierer, könnte dies nicht anders sein.
Ein Beispiel dafür, wann EXISTS besser ist