SR0004:请避免将不带索引的列用作 IN 谓词中的测试表达式

规则 ID

SR0004

类别

Microsoft.Performance

是否重大更改

非重大更改

原因

IN 谓词可以引用没有索引的列。

规则说明

如果使用 WHERE 子句,该子句引用一个或多个未作为 IN 谓语一部分索引的列,则会引起表扫描。 表扫描会降低性能。

如何解决冲突

若要解决此问题,必须进行下列更改之一:

  • 更改 IN 谓词以只引用具有索引的这些列。

  • 将索引添加到 IN 谓词引用的任何列以及还没有索引的任何列。

何时禁止显示警告

如果表将永远不会包含几行以上,则可以禁止显示此警告。

示例

在此示例中,简单的 SELECT 语句引用没有索引的列 [c1]。 第二个语句定义索引,您可以添加该索引以解决此警告。

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

请参见

概念

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