SR0006:將資料行參考移至比較運算子的一邊,以使用資料行索引
RuleId |
SR0006 |
分類 |
Microsoft.Performance |
中斷變更 |
中斷 |
原因
比較的一部分,包含資料行參考的運算式。
規則描述
如果您的程式碼比較包含資料表參考的運算式,可能會導致資料表掃描。
如何修正違規
若要解決這個問題,您必須重新作業比較,使資料行參考單獨出現在比較運算式的一方,而不是在運算式內。 當您執行單獨參考比較運算子其中一邊的資料行的程式碼時,SQL Server 可以使用資料行索引,而且不會執行資料表掃描。
隱藏警告的時機
如果要比較其資料行的資料表將永遠不會包含多個資料列,您可以隱藏這項警告。
範例
在第一個程序中,WHERE 子句在運算式中包含資料行 [c1] 以做為比較的一部分。 在第二個程序中,比較結果會完全相同,但永遠不需要資料表掃描。
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))