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


SR0006: для использования индекса столбца переместите ссылку на столбец на одну сторону оператора сравнения

Идентификатор RuleId

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

См. также

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

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