SR0006:将列引用移到比较运算符的一侧,以使用列索引

规则 ID

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))

请参见

概念

分析数据库代码以提高代码质量