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