SQL - IN vs. NICHT IN

8

Angenommen, ich besitze eine Tabelle mit einer Spalte, die Werte von 1 bis 10 annehmen kann. Ich muss Spalten mit allen Werten außer 9 und 10 auswählen. Gibt es einen Unterschied (leistungsmäßig), wenn ich diese Abfrage verwende:

%Vor%

und dieser?

%Vor%     
kyooryu 03.06.2013, 07:12
quelle

4 Antworten

8

Wenn es um Leistung geht, sollten Sie Ihren Code immer profilieren (dh führen Sie Ihre Abfragen einige tausend Mal aus und messen Sie jede Schleifenleistung mit einer Art stopwatch . Probe ).

Aber hier empfehle ich dringend, die erste Abfrage für bessere zukünftige Wartung zu verwenden. Die Logik ist, dass Sie alle Datensätze außer 9 und 10 benötigen. Wenn Sie Wert 11 zu Ihrer Tabelle hinzufügen und zweite Abfrage verwenden, wird die Logik Ihrer Anwendung unterbrochen, was natürlich zu einem Fehler führt.

Bearbeiten: Ich erinnere mich, dass dies als php markiert wurde, deshalb habe ich eine Probe in PHP geliefert, aber ich könnte mich irren. Ich denke, es wird nicht schwer sein, das Sample in der von Ihnen verwendeten Sprache neu zu schreiben.

    
Leri 03.06.2013, 07:14
quelle
9

Verwenden Sie "IN", da dies sehr wahrscheinlich dazu führt, dass das DBMS einen Index für die entsprechende Spalte verwendet.

"NOT IN" könnte theoretisch auch in eine Indexverwendung übersetzt werden, aber in einer komplizierteren Art und Weise, die das DBMS nicht mit "Overhead Time" verbringen könnte.

    
Serge 03.06.2013 07:35
quelle
2

Ich habe gesehen, dass Oracle Probleme hat, einige Abfragen mit NOT IN zu optimieren, wenn Spalten NULL-fähig sind. Wenn Sie Ihre Anfrage in beide Richtungen schreiben können, ist IN, soweit es mich betrifft, bevorzugt.

    
StilesCrisis 03.06.2013 07:17
quelle
0

Für eine Liste von Konstanten erweitert MySQL Ihren Code intern um:

%Vor%

Gleiches gilt für das andere, stattdessen mit 8 mal = .

Also, der erste wird schneller sein, weniger Vergleiche. Die Wahrscheinlichkeit, dass es messbar ist, ist vernachlässigbar, der Aufwand einer Handvoll konstanter Vergleiche ist jedoch nichts im Vergleich zum allgemeinen Aufwand beim Parsen von SQL und beim Abrufen von Daten.

    
Niels Keurentjes 03.06.2013 07:16
quelle

Tags und Links