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

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Всем доьрое время суток.

Суть "проблемы" такая что есть "здоровый запрос" (динамический) вида:

select
  from vwSomeShemaBindingViewWithIndexes v  with(noexpand)
 inner
   join ContainsTable () fts
     on v.pk = fts.[key]
 
 --Остальная часть запроса
 Inner
   join ...
   
   left
   join table tl...

where ...
    and tl.pk is null
     


По умолчанию план запроса строится таким образом что сначала ищутся записи по критериям НЕ ФТС, там условиям поиска удовлетворяют "чут ли не все", а потом только применяется FTS которая значително ограничивает результат.

Заставить работать "более или менее как хочу" получается
1) поменять местами vwSomeShemaBindingViewWithIndexes и ContainsTable
2) hint-s with(noexpand, forceseek) и option (FORCE ORDER);

Хотя сам Хинт "option (FORCE ORDER);" глобально мне не нужен. Мне нужно что бы выполнился join FTS и основной вьюхи/таблицы первым, а потом план запроса пусть строится "как ему виднее". Тем более сам ФТС не всегда будет применятся.

Как этого "достич" и сделать что-то вроде такого же "хинта" только для одного джойна?!
По сути продолжение
https://www.sql.ru/forum/1031644-2/execution-plan-s-hell
3 июл 13, 16:35    [14517748]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Есть у кого идеи как заставить сначала работать джойн с ФТСом?
3 июл 13, 19:26    [14518704]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
NIIIK,

Есть... "здоровый запрос" разбить на несколько маленьких.
3 июл 13, 19:34    [14518743]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
С временными таблицами/табличными пременными гонять в них - 20000-50000 строк?
3 июл 13, 19:44    [14518784]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
NIIIK,

Если 10ки тысяч записей, то только временные таблицы, возможно, с необходимыми индексами.

Сообщение было отредактировано: 3 июл 13, 19:48
3 июл 13, 19:48    [14518802]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
NIIIK
С временными таблицами/табличными пременными гонять в них - 20000-50000 строк?

самый лучший способ - вообще функцию выкинуть...
ну иначе серез времменные да.. 50к строк это пыль
3 июл 13, 22:37    [14519405]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Как бы хочется именно "без костылей" обойтись уровня временных таблиц тем более ФТС функия может есть, а может и нет (в зависимости от параметров и запрос динамический). Тем более у меня получается "не тратить время" на создание дополнительных таблиц и индексов (если поменять местами и исользовать хинты), только хотелось бы это сделать "по умному" и что бы хинт был "локальный" только для одноо джойна.

Сосбветнно если из запроса убрать "все остальные джойны" (или большую часть из них), то джойн с FTS функцией работает быстро и в плане "как я ожидаю". Собственно хотелось бы что бы это так и осталось при "возвращении" остальных джойнов.
3 июл 13, 23:03    [14519508]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Альтернатив не нашлось?!
4 июл 13, 18:51    [14524253]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
NIIIK
Альтернатив не нашлось?!
В статистике точно проблем нет? Где не верные оценки кардинальности вы уже нашли?
4 июл 13, 19:39    [14524428]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
NIIIK
Альтернатив не нашлось?!



джойнуть с таблицей, на которой FT index, если есть полядля джойна
типа такого

select
  from vwSomeShemaBindingViewWithIndexes v  with(noexpand)
 inner
   join  tableFTCContainsTable fts
     on v.pk = fts.[key]  and contains(fts.*,...)


или создать вью с FTS индексом и тоже использовать contains()
4 июл 13, 19:42    [14524438]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Mind
NIIIK
Альтернатив не нашлось?!
В статистике точно проблем нет? Где не верные оценки кардинальности вы уже нашли?


В статистике я шарю слабо на уровне "не шарю" скорее.
5 июл 13, 15:20    [14528197]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
NIIIK
Mind
пропущено...
В статистике точно проблем нет? Где не верные оценки кардинальности вы уже нашли?


В статистике я шарю слабо на уровне "не шарю" скорее.


(ушло рано)

Я пересоздавал индексы уже после этого (те же самые, думаю старая уже "ушла"). В той статистеке которая в дереве обектов ставил галочку "update statistics for thoese columns" в свойствах.

Могу сказать что один из вариантов с явным указанием индекса перестал работать быстро после моих шаманств.

Как оценивать эту статистику, которая для меня "чёрный ящик" и понятие довольно абстрактное?
5 июл 13, 15:23    [14528232]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
Winnipuh
NIIIK
Альтернатив не нашлось?!



джойнуть с таблицей, на которой FT index, если есть полядля джойна
типа такого

select
  from vwSomeShemaBindingViewWithIndexes v  with(noexpand)
 inner
   join  tableFTCContainsTable fts
     on v.pk = fts.[key]  and contains(fts.*,...)


или создать вью с FTS индексом и тоже использовать contains()


Так врят ли получится. Тем более вьюха - это та в которой как раз и есть ФТС индекс
(тут проще контейнс перенести в where или на уровне другого inner join, если рейтинг не нужен).

Я ещё "шаманил по-другому

в духе

select
  from (select top 10000000 v.*
            from vw v
           inner
            join containstable ()) t


В целом тоже "только с хинтами" быстро работает (force order + with(noexpand)) причём когда добавляешь хинт forceseek - только хуже.
5 июл 13, 15:31    [14528340]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
NIIIK
Member

Откуда: Россия, Ростовская область, г. Таганрог
Сообщений: 1295
При некоторых сочетаниях хинтов и force order
даёт

ПРИНТ
Query processor could not produce a query plan because of the hints defined in this query. Resubmit the query without specifying any hints and without using SET FORCEPLAN.
5 июл 13, 16:01    [14528621]     Ответить | Цитировать Сообщить модератору
 Re: План запроса, FTS (ContainsTable) в первую очередь  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
NIIIK
NIIIK
пропущено...


В статистике я шарю слабо на уровне "не шарю" скорее.


(ушло рано)

Я пересоздавал индексы уже после этого (те же самые, думаю старая уже "ушла"). В той статистеке которая в дереве обектов ставил галочку "update statistics for thoese columns" в свойствах.

Могу сказать что один из вариантов с явным указанием индекса перестал работать быстро после моих шаманств.

Как оценивать эту статистику, которая для меня "чёрный ящик" и понятие довольно абстрактное?
Смотреть планы, на actual and estimated rows.
6 июл 13, 01:38    [14530568]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить