Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Full Text Search AND vs OR.  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
Доброго дня все.

Есть табличка в 100 000 000 записей.
На табличке висит Full text search index по текстовому полю.
Все красиво хорошо.

но на некоторых запросах наблюдается странный эффект.

Select * from CONTAINStable (testdata..temp_data , q1,N'(mouse OR mice OR mose) AND duck')  

1 sec

Select * from CONTAINStable (testdata..temp_data , q1,N'mouse AND duck')            
Select * from CONTAINStable (testdata..temp_data , q1,N'mice AND duck')
Select * from CONTAINStable (testdata..temp_data , q1,N'mose AND duck')

Все 3 запроса за 0.3 sec итого.

Планы выполнения конечно разные, но разве это нормальная ситуация?

Select @@version = 10.0.5500.0 MS SQL 2008 SP3

И еще вопрос.

Select * from CONTAINStable (testdata..temp_data , q1,N'duck',1000)            

1000 строк
Select * from CONTAINStable (testdata..temp_data , q1,N'duck')            

500 000 строк
Время выполнения около 2 сек в обоих случаях.
Я понимаю что для вычисления ранга надо ресурсы, но не так же круто.

Это нормальная ситуация для данной версии MS SQL?
Что надо сделать (hot fixs или переход на следующие версии MS SQL)?
В идеале очень хочется быстро получить информацию сколько всего строк удовлетворяет условию или любые первые 1000 строк без ранга.

Запрос
Select * from CONTAINStable (testdata..temp_data , q1,N'auto')  

5 строк
Select * from CONTAINStable (testdata..temp_data , q1,N'voiture')  

500 строк

А время выполнения одинаковое - 500 мс.

Очень хочется избавиться от подобного эффекта.

Спасибо
30 апр 12, 15:01    [12490511]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
iljy
Member

Откуда:
Сообщений: 8711
Volochkova
Планы выполнения конечно разные, но разве это нормальная ситуация?

Когда разные запросы с разными планами выполняются за разное время - это более чем нормально. И для оптимизации OR часто используют замену через UNION (как впрочем и наоборот).

Volochkova
Я понимаю что для вычисления ранга надо ресурсы, но не так же круто.

А еще для получения top 1000 по рангу надо выбрать все записи и затем их отсортировать (не полностью, но тем не менее).

Volochkova
любые первые 1000 строк без ранга.

top 1000

Volochkova
Запрос
Select * from CONTAINStable (testdata..temp_data , q1,N'auto')  

5 строк
Select * from CONTAINStable (testdata..temp_data , q1,N'voiture')  

500 строк

А время выполнения одинаковое - 500 мс.

Очень хочется избавиться от подобного эффекта.

Какого эффекта? Что при небольшом количестве (а 500 - это небольшое количество) найденных строк полнотекстовый поиск одинаковой сложности выполняется за примерно одинаковое время?
30 апр 12, 23:03    [12491369]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
iljy
Volochkova
Планы выполнения конечно разные, но разве это нормальная ситуация?

Когда разные запросы с разными планами выполняются за разное время - это более чем нормально. И для оптимизации OR часто используют замену через UNION (как впрочем и наоборот).

За UNION спасибо.
Вопрос про нормальность был в том, что почему сервер для подобной операции (OR) строит неоптимальный запрос, когда руками можно построить иной. Может в других версиях этот эффект подправили? Или это обычная ситуация?
Попробую провести аналогию. Например постраничная выборка. в 2012 уже сделали параметр - пропустить первые n строк.


Volochkova
Я понимаю что для вычисления ранга надо ресурсы, но не так же круто.

А еще для получения top 1000 по рангу надо выбрать все записи и затем их отсортировать (не полностью, но тем не менее).

Volochkova
любые первые 1000 строк без ранга.

top 1000

Верно. Но мне надо 1000 из containstable ,без ранга.
containstable сначала выберет все 5 000 000 и потом даст 1000 строк. Выигрыша во времени никакого.

Volochkova
Запрос
Select * from CONTAINStable (testdata..temp_data , q1,N'auto')  

5 строк
Select * from CONTAINStable (testdata..temp_data , q1,N'voiture')  

500 строк

А время выполнения одинаковое - 500 мс.

Очень хочется избавиться от подобного эффекта.

Какого эффекта? Что при небольшом количестве (а 500 - это небольшое количество) найденных строк полнотекстовый поиск одинаковой сложности выполняется за примерно одинаковое время?


500 строк это мало. Верно. Но 5 строк еще меньше.
А время выполнения - одинаковое.

Спасибо
1 май 12, 06:18    [12491780]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
iljy
Member

Откуда:
Сообщений: 8711
Volochkova
500 строк это мало. Верно. Но 5 строк еще меньше.
А время выполнения - одинаковое.

Подозреваю, что время на собственно выборку строк - это о-малое от времени инициализации движка и поиска по индексу.
1 май 12, 12:02    [12492048]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
А как можно изменить время инициализации движка?

Сам full text search индекс живет на SSD.
Точнее файловая группа, в которой он располагается.


Мне надо найти любые n строк... максимально быстро, не взирая на ранги.
Т.е. если нет ничего на слово mouse ищем на mice и т.п.

Спасибо.
2 май 12, 05:14    [12493857]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
iljy
Member

Откуда:
Сообщений: 8711
Volochkova
А как можно изменить время инициализации движка?

Свой написать
Volochkova
Мне надо найти любые n строк... максимально быстро, не взирая на ранги.
Т.е. если нет ничего на слово mouse ищем на mice и т.п.

Я же говорил уже - top(N) поставьте, будут вам первые N строк невзирая на ранги.
2 май 12, 10:24    [12494313]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
Про свой написать - спасибо.

Select top 100 строит такой же план что и Select [key] from containstable(..., 100)
Время выполнение тоже одинаковое.

Еще раз, спасибо.
2 май 12, 10:40    [12494367]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
Коллеги, а может ли Rank быть отрицательным?
9 май 12, 08:01    [12525844]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Full Text Search AND vs OR.  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
Может кому то пригодится.
2008 FTX
проблему решили "формой" OR
Select * from CONTAINStable (testdata..temp_data , q1,N'(mouse OR mice OR mose) AND duck') 


1 sec.

Select * from CONTAINStable (testdata..temp_data , q1,N'(mouse AND duck)  OR ( mice AND duck) OR (mose AND duck) ') 


0.4 sec

Странно для 2008.
Сейчас на 2014 переходим, посмотрим как там будет.
26 сен 14, 13:52    [16625815]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Volochkova
Может кому то пригодится.
2008 FTX
проблему решили "формой" OR
Select * from CONTAINStable (testdata..temp_data , q1,N'(mouse OR mice OR mose) AND duck') 


1 sec.

Select * from CONTAINStable (testdata..temp_data , q1,N'(mouse AND duck)  OR ( mice AND duck) OR (mose AND duck) ') 


0.4 sec

Странно для 2008.
Сейчас на 2014 переходим, посмотрим как там будет.


решили только при помощи ДНФ? больше ничего не менялось?
не верю (ц)

А другие выражения проверяли?
26 сен 14, 14:15    [16625978]     Ответить | Цитировать Сообщить модератору
 Re: Full Text Search AND vs OR.  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
На других проверяла.
Ничего не менялось.
Запросы отрабатывают на одинаковом наборе данных, время запуска - разница не более минуты - FTX за это время не пересчитывался.
26 сен 14, 15:00    [16626377]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить