SQL Server, как вопрос оператора - PullRequest
3 голосов
/ 09 сентября 2010

Я использую SQL Server 2008 Enterprise. Теперь у меня есть два шаблона для реализации одной и той же функции (чтобы увидеть, содержит ли столбец zoo1 или zoo2 или zoo3 какой-то текст, в шаблоне 1 я объединяю содержимое zoo1, zoo2 и zoo3, чтобы сформировать новый столбец с именем zoo), я думаю, что первый шаблон всегда лучше производительности (я провел некоторый эксперимент) из моего эксперимента. Но я не уверен, что я прав, и какова внутренняя причина того, почему шаблон 1 всегда лучше работает?

Шаблон 1:

Select foo, goo from tablefoo where zoo like LIKE '%'+@Query+'%'

Шаблон 2 (zoo - это столбец, в который я объединяю содержимое столбцов zoo1, zoo2 и zoo3):

Select foo, goo from tablefoo where (zoo1 like LIKE '%'+@Query+'%') OR (zoo2 like LIKE '%'+@Query+'%') or (zoo3 like LIKE '%'+@Query+'%')

спасибо заранее, George

1 Ответ

3 голосов
/ 09 сентября 2010

ИЛИ почти всегда убивает производительность.

В данном случае это 3 столбца для сканирования против 1 столбца для сканирования.

В обоих случаях, поскольку у вас есть начальный%, индекс все равно не будет использоваться (это может быть сканирование, поскольку оно охватывает столбцы zoo%)

1 столбец просто менее плох, чем запрос 3 столбца ИЛИ. Не "лучше".

...