SR0005: не используйте шаблоны, которые начинаются с "%", в предикатах LIKE
Идентификатор RuleId |
SR0005 |
Категория |
Microsoft.Performance |
Критическое изменение |
Не критическое |
Причина
Предикат LIKE из предложения WHERE начинается с подстановочного знака "%".
Описание правила
Использование предложения WHERE, содержащего предикат LIKE наподобие "%строка шаблона", для поиска текста, который может встретиться в любом месте столбца, может привести к сканированию таблицы.
Устранение нарушений
Чтобы устранить эту проблему, необходимо изменить строку поиска таким образом, чтобы она начиналась с символа, который бы не являлся подстановочным знаком (%), либо же следует создать полнотекстовый индекс.
Отключение предупреждений
Можно отключить это предупреждение, если вызывающая его инструкция используется редко, или если таблица никогда не будет содержать большое количество строк.
Пример
В первом примере оператор SELECT вызовет сканирование таблицы, поскольку строка поиска начинается с подстановочного знака. Во втором примере оператор вызовет сканирование индекса, поскольку строка поиска не начинается с подстановочного знака. Поиск по индексу извлекает только строки, соответствующие предложению WHERE.
SELECT [dbo].[Table2].[ID], [dbo].[Table2].[c1], [dbo].[Table2].[c2], [dbo].[Table2].[c3], [dbo].[Table2].[Comment]
FROM dbo.[Table2]
WHERE Comment LIKE '%pples'
SELECT [dbo].[Table2].[ID], [dbo].[Table2].[c1], [dbo].[Table2].[c2], [dbo].[Table2].[c3], [dbo].[Table2].[Comment]
FROM dbo.[Table2]
WHERE Comment LIKE 'A%'