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