SR0004: Vermeiden Sie die Verwendung von Spalten ohne Index als Testausdrücke in IN-Prädikaten

Regel-ID

SR0004

Kategorie

Microsoft.Performance

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein IN-Prädikat verweist auf eine Spalte, die keinen Index hat.

Regelbeschreibung

Sie verursachen einen Tabellenscan, wenn Sie eine WHERE-Klausel verwenden, die auf eine oder mehrere Spalten verweist, die nicht als Teil eines IN-Prädikats indiziert sind. Der Tabellenscan reduziert die Leistung.

Behandeln von Verstößen

Um dieses Problem zu beheben, müssen Sie eine der folgenden Änderungen vornehmen:

  • Ändern Sie das IN-Prädikat, um auf nur jene Spalten zu verweisen, die einen Index haben.

  • Fügen Sie einen Index jeder Spalte hinzu, auf die das IN-Prädikat verweist, und die noch keinen Index besitzt.

Wann sollten Warnungen unterdrückt werden?

Sie können diese Warnung unterdrücken, wenn die Tabelle immer nur einige Zeilen enthält.

Beispiel

In diesem Beispiel verweist eine einfache SELECT-Anweisung auf eine Spalte, [c1], die keinen Index besitzt. Durch die zweite Anweisung wird ein Index definiert, den Sie hinzufügen können, um diese Warnung aufzulösen.

CREATE PROCEDURE [dbo].[Procedure3WithWarnings]
AS
SELECT [Comment] 
FROM [dbo].[Table2]  
WHERE [c1] IN (1, 2, 3)

CREATE INDEX [IX_Table2_C1]
ON [dbo].[Table2] (c1);

Siehe auch

Konzepte

Analysieren von Datenbankcode zum Verbessern der Codequalität