Поделиться через


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

См. также

Основные понятия

Анализ кода базы данных с целью улучшения качества кода