Die Verwendung von NOT-Logik in Bezug auf Indizes

12

Laut dem Microsoft-Buch zur Datenbankentwicklung Prüfung 70-433: Microsoft SQL Server 2008-Datenbankentwicklung :

Weder führende Platzhalterzeichen noch NOT- Logik ermöglichen es dem Abfrageoptimierer, Indizes zur Optimierung der Suche zu verwenden. Um eine optimale Leistung zu erzielen, sollten Sie die Verwendung des Schlüsselworts NOT und der führenden Platzhaltersymbole vermeiden .

Also nahm ich das an NOT IN, NOT EXISTSusw

In Bezug auf diese SO- Frage dachte ich, dass die gewählte Lösung von @GBN die oben angegebene Aussage verletzen würde.

Anscheinend nicht.

Meine Frage lautet also: Warum?

Stuart Blackler
quelle

Antworten:

21
  • NOT IN (SELECT ...)und NOT EXISTS (SELECT .. WHERE correlation..)sind "Anti Semi Joins". Das heißt, erkannte satzbasierte Operationen

  • WHERE NOT (MyColumn = 1) ist ein Filter, bei dem alle Zeilen betrachtet werden müssen

Weitere Informationen finden Sie unter:

Edit: der Vollständigkeit halber

LINKE VERBINDUNGEN schneiden oft schlechter ab. Siehe http://explainextended.com/2009/09/15/not-in-vs-not-exists-vs-left-join-is-null-sql-server

Dieselbe Site stellt fest, dass NOT EXISTS in MySQL nicht wie andere RDBMS optimiert ist und LEFT JOIN besser ist

In SQL Server weiß ich aus Erfahrung, dass LEFT JOIN nicht so gut läuft wie NOT EXISTS. Sie benötigen häufig auch DISTINCT, um die gleichen Ergebnisse wie in einem anderen Verarbeitungsschritt zu erhalten.

gbn
quelle
0

Ich benutze dafür eine Unterauswahl:

SELECT m* from Main AS m 
    WHERE m.id NOT IN 
        (SELECT m2.id FROM Main AS m2 
           WHERE m2.id IN (...possibly null/empty list goes here...));

Wenn Ihr Tisch groß ist, sollten Sie ihn natürlich analysieren, um die Leistung zu überprüfen. Wenn Sie zusätzliche Klauseln zum Filtern der Ergebnisse in der Hauptabfrage haben, müssen Sie diese möglicherweise in der Unterauswahl duplizieren. Unabhängig davon hat die Unterauswahl ein "IN" im Vergleich zu einem "NOT IN" und kann daher zu Ergebnissen unterschiedlicher Größe führen und in der Regel Fragen zur Leistung stellen. Analysieren Sie diesen Ansatz daher, wenn Sie eine große Tabelle verwenden.

weich machen
quelle