SR0006: Verschieben Sie einen Spaltenverweis auf eine Seite eines Vergleichsoperators, um einen Spaltenindex zu verwenden

Regel-ID

SR0006

Kategorie

Microsoft.Performance

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Als Teil eines Vergleiches enthält ein Ausdruck einen Spaltenverweis.

Regelbeschreibung

Durch den Code kann ein Tabellenscan verursacht werden, wenn ein Ausdruck verglichen wird, der einen Spaltenverweis enthält.

Behandeln von Verstößen

Um dieses Problem zu beheben, müssen Sie den Vergleich überarbeiten, damit der Spaltenverweis allein auf einer Seite des Vergleichsoperators angezeigt wird statt innerhalb eines Ausdrucks. Wenn Sie den Code ausführen, der den Spaltenverweis nur auf einer Seite des Vergleichsoperators besitzt, kann SQL Server den Spaltenindex verwenden, und es wird kein Tabellenscan ausgeführt.

Wann sollten Warnungen unterdrückt werden?

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

Beispiel

In der ersten Prozedur schließt eine WHERE-Klausel eine Spalte [c1] in einen Ausdruck als Teil eines Vergleiches ein. In der zweiten Prozedur sind die Vergleichsergebnisse identisch, erfordern jedoch nie einen Tabellenscan.

CREATE PROCEDURE [dbo].[Procedure3WithWarnings]
@param1 int
AS
SELECT [c1], [c2], [c3], [Comment] 
FROM [dbo].[Table2]  
WHERE ([c1] + 5 > @param1)

CREATE PROCEDURE [dbo].[Procedure3Fixed]
@param1 int
AS
SELECT [c1], [c2], [c3], [Comment] 
FROM [dbo].[Table2]  
WHERE ([c1] > (@param1 - 5))

Siehe auch

Konzepte

Analysieren von Datenbankcode zum Verbessern der Codequalität