2010-02-01 3 views
6

die SQL-Anweisung gegeben:SQL Server 'In' Statement Artikel Best for Performance

SELECT * 
FROM MY_TABLE 
WHERE SomeNumberField in (0,99999) 

Wenn ich, dass die Mehrheit der Zeilen in MY_TABLE hat SomeNumberField Set 99999 garantieren kann, und projizieren kann, dass dies die bleibt Fall indefinately, ist es besser, die oben Abfrage wie folgt zu schreiben:

SELECT * 
FROM MY_TABLE 
WHERE SomeNumberField in (99999,0) 

Antwort

4

Wenn Sie einen Index auf SomeNumberField haben, dann wird diese Aussage entweder nur in zwei Bereichsscans auf dem Index oder als TABLE SCAN/CLUSTERED INDEX SCAN mit einem verarbeitetes Filter.

Letzteres ist wahrscheinlicher, vorausgesetzt, dass die Mehrheit Ihrer Reihen SomeNumberField = 999999

Die Bereichsscans hat immer in der Index-Reihenfolge durchgeführt werden, unabhängig von den Konstanten in dem IN Prädikat bestellen.

Die Filtervergleichszeit ist vernachlässigbar im Vergleich zu der Zeit, die zum Abrufen der Datenseiten benötigt wird.

1

diese Art der Optimierung kann, vorausgesetzt, Sie Statistiken sammeln automatisch vom SQL-Optimierungsprogramm durchgeführt werden, die vom Optimierungsprogramm verwendet werden. Sie können für diese Aufgabe vom Datenbankanbieter zur Verfügung gestellte Tools verwenden. Für SQL Server in dem folgenden Artikel auf MSDN beziehen: http://msdn.microsoft.com/en-us/library/cc966419.aspx