Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Возрастает скорость обработки по условию Like, если используется не текст, а переменная  [new]
frenkybob
Member

Откуда:
Сообщений: 5
Здравствуйте!

Базовые условия такие.

Есть таблица BigTable, состоящая из 1 столбца - Column1 типа varchar(max). Всего более 500 000 записей, каждая запись длинною 500-1000 символов.

Если делать запрос:

select * from BigTable
where Column1 like '%Искомый текст%'

то это обрабатывается около 7 секунд (приемлемо). '%Искомый текст%' содержит до 50 символов.

если сделать запрос

declare @text varchar(500)
set @text='%Искомый текст%'

select * from BigTable
where Column1 like @text

то этот же запрос обрабатывается около 30 секунд (долго).
Результатов запроса - до 10.

Данный запрос должен производится в процедуре, поэтому должен использоваться во втором варианте (с переменной).


В связи с этим такие вопросы:
1. Почему использование переменной так сильно тормозит запрос и можно ли при использовании переменной добиться той де скорости как при использовании текста?
2. Может есть другие варианты?

Благодарен за помощь!
19 сен 13, 19:40    [14861431]     Ответить | Цитировать Сообщить модератору
 Re: Возрастает скорость обработки по условию Like, если используется не текст, а переменная  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34705
Боюсь, что оба варианта работают одинаково плохо.
А разница -- просто случайность.

В любом случае тебе нужно смотреть на планы запросов, чтобы понять, почему такая разница,
но на самом деле туда и смотреть-то особенно бесполезно -- поиск по инфиксу не идёт через индекс.
Только по префиксу.

В твоём случае помог бы полнотектовый индекс и соотв. использование полнотектовых операций поиска.
19 сен 13, 21:21    [14861633]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить