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

Откуда:
Сообщений: 143
Доброго дня.
Есть запрос, в который входит 30 соединений... Как всегда оптимизатор легких путей не ищет (не спрашивайте ничего). Есть подзапрос, который работает быстро и возвращает небольшое кол-во строк, но в самом запросе, оптимизатор ВСЕГДА раскладывает подзапрос и получается НЕ ОПТИМАЛЬНО. Результат подзапроса можно закинуть во временную таблицу, но такой путь не очень хорош при большом кол-ве строк, много времени уходит на запись во временную таблицу. Как оптимизатор можно заставить на раскладывать подзапрос?
11 мар 13, 09:34    [14033555]     Ответить | Цитировать Сообщить модератору
 Re: Результат подзапроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
ArtMan
Как оптимизатор можно заставить на раскладывать подзапрос?
Предполагаю, что никак.
Но, может, поможет
SELECT TOP(SELECT 100) PERCENT ...
в подзапросе?

Оптимизатор не успевает до таймаута перебрать все комбинации таблиц в 30 JOINах.
Можно попробовать подобрать оптимальный порядок JOINов и использовать хинт FORCE ORDER.
11 мар 13, 09:42    [14033575]     Ответить | Цитировать Сообщить модератору
 Re: Результат подзапроса  [new]
ArtMan
Member

Откуда:
Сообщений: 143
FORCE ORDER не подойдет, запрос строится динамически и в некоторых случаях с FORCE ORDER идет дольше чем без него.

А хинт NOEXPAND работает для обычных вью?
11 мар 13, 09:45    [14033584]     Ответить | Цитировать Сообщить модератору
 Re: Результат подзапроса  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
ArtMan
FORCE ORDER не подойдет, запрос строится динамически и в некоторых случаях с FORCE ORDER идет дольше чем без него.

А хинт NOEXPAND работает для обычных вью?
JOINы-то меняли местами? Иначе какой смысл говорить про FORCE ORDER?
11 мар 13, 10:02    [14033641]     Ответить | Цитировать Сообщить модератору
 Re: Результат подзапроса  [new]
Гость333
Member

Откуда:
Сообщений: 3683
ArtMan
А хинт NOEXPAND работает для обычных вью?

Поясните, пожалуйста, как вы себе представляете работу этого хинта для неиндексированных представлений.
11 мар 13, 10:27    [14033750]     Ответить | Цитировать Сообщить модератору
 Re: Результат подзапроса  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
ArtMan
Доброго дня.
Есть запрос, в который входит 30 соединений... Как всегда оптимизатор легких путей не ищет (не спрашивайте ничего). Есть подзапрос, который работает быстро и возвращает небольшое кол-во строк, но в самом запросе, оптимизатор ВСЕГДА раскладывает подзапрос и получается НЕ ОПТИМАЛЬНО. Результат подзапроса можно закинуть во временную таблицу, но такой путь не очень хорош при большом кол-ве строк, много времени уходит на запись во временную таблицу. Как оптимизатор можно заставить на раскладывать подзапрос?
Как в вашем случае получается лучше, с временной таблицей или с подзпросом? 30 соединений это весьма много, и сервер часто ошибается при попытках определить результирующее количество строк. Вариант с временной промежуточной таблицей позволяет подправить ошибку с cardinality estimates. Именно поэтому оргомные запросы рекомендуют разбивать на части.

А вообще без планов запросов, считаю продолжение дискуссии бессмысленным.
12 мар 13, 01:14    [14037905]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить