Одед прав, вам обязательно стоит начать с плана запроса. Тем не менее, есть несколько вещей, которые вы уже можете увидеть на высоком уровне, например:
ПРЕОБРАЗОВАТЬ (VARCHAR (8000), CN.Note) КАК '% T B9997%'
LIKE
поисковые запросы с подстановочным знаком впереди - плохие новости с точки зрения производительности из-за того, как работают индексы. Если задуматься, в телефонной книге легко найти всех людей, чьи имена начинаются с «Smi». Если вы попытаетесь найти всех людей, у которых есть «mit» в любом месте своего имени, вы обнаружите, что вам нужно прочитать всю телефонную книгу. SQL Server делает то же самое - это называется полным сканированием таблицы и обычно выполняется довольно медленно. Другая проблема заключается в том, что левая часть условия использует функцию для изменения столбца (в частности, преобразования его в varchar). По сути, это снова означает, что SQL Server не может использовать индекс, даже если он был для столбца CN.Note.
Я предполагаю, что столбец - это text
столбец, и вам не будет разрешено изменять логику фильтра, чтобы удалить подстановочный знак в начале поиска. В этом случае я бы порекомендовал изучить полнотекстовый поиск / индексирование функциональность. Включив полнотекстовое индексирование и используя определенные ключевые слова, такие как CONTAINS
, вы должны повысить производительность.
Опять же (как и во всех сценариях оптимизации производительности) вам все равно следует начать с плана запроса, чтобы увидеть, действительно ли это самая большая проблема с запросом.
23.09.2011