SR0004: не используйте столбцы без индексов в качестве тестовых выражений в предикатах IN
Идентификатор RuleId |
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);