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

Откуда:
Сообщений: 57
Есть один и тот же запрос без вложенных, просто несколько джойнов с кучей условий в where.

И он работает моментально, когда
... where ... and a = 0 ....

и 2 минуты, когда
... where ... and a = 1 ....

Выбирая во втором варианте совершенно убогий план запроса.

Я навтыкал кучу хинтов глядя в первый план, который правильный и хороший. Разогнал до 8 секунд запроc. Но план все равно убогий.

Отбор надо начинать с самой маленькой таблицы, а потом клеить к ней большие таблицы по индексам с высокой селективностью и соотношением 1 ко многим (в этой маленькой таблицей), так быстро и это первый план запроса.
Но как заставить начать его делаться с правильной таблицы. Я уже пробовал и во вложенный запихивать и условия из where в on переносить, но это, видимо, ни на что не влияет.
Единственное что работает - это временная таблица (деление запроса на два), но это как-то не православно.

Какие есть хинты для управления последовательностью отбора данных?
Я буду очень благодарен если кто-нибудь даст толковую ссылку вроде "планы запросов для чайников" или "хинты для чайников"
13 янв 17, 10:39    [20101594]     Ответить | Цитировать Сообщить модератору
 Re: Принудительный план запроса. SQL server 2000  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
PZH,

а может ну его 2000... и проблем будет меньше.
по книгам eBOOK_SQLServerExecutionPlans_2Ed_G_Fritchey
13 янв 17, 10:46    [20101624]     Ответить | Цитировать Сообщить модератору
 Re: Принудительный план запроса. SQL server 2000  [new]
invm
Member

Откуда: Москва
Сообщений: 9400
PZH
Отбор надо начинать с самой маленькой таблицы, а потом клеить к ней большие таблицы по индексам с высокой селективностью и соотношением 1 ко многим (в этой маленькой таблицей), так быстро и это первый план запроса.
Но как заставить начать его делаться с правильной таблицы.
option (force order)
13 янв 17, 11:02    [20101689]     Ответить | Цитировать Сообщить модератору
 Re: Принудительный план запроса. SQL server 2000  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
PZH,

я такое в функцию заворачивал
там тоже как-бы временнная таблица получается, но неявная
тоже под 2000 было дело
никак не мог справится чтобы заставить правильно фильтры применялись и нужный порядок связывания
до сих пор хорошо работает
13 янв 17, 12:17    [20102124]     Ответить | Цитировать Сообщить модератору
 Re: Принудительный план запроса. SQL server 2000  [new]
PZH
Member

Откуда:
Сообщений: 57
invm,

Спасибо.
Вариант с option (force order) работает, когда переписал в нужном порядке запрос.

Правда уже нашел другой выход. Через сортировку order by по этой переменной и легкий допил приложения.
Работает тоже быстро, уже не буду менять.
13 янв 17, 12:32    [20102235]     Ответить | Цитировать Сообщить модератору
 Re: Принудительный план запроса. SQL server 2000  [new]
aleks2
Guest
PZH
Отбор надо начинать с самой маленькой таблицы, а потом клеить к ней большие таблицы по индексам с высокой селективностью и соотношением 1 ко многим (в этой маленькой таблицей), так быстро и это первый план запроса.
Но как заставить начать его делаться с правильной таблицы. Я уже пробовал и во вложенный запихивать и условия из where в on переносить, но это, видимо, ни на что не влияет.

Иногда, помогало на 2000-м
[самой маленькой таблицы] LEFT OUTER JOIN  [клеить к ней большие таблицы ]


если прочей логике запроса не мешает.
13 янв 17, 12:32    [20102236]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить