powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как зафиксировать соединение в плане
13 сообщений из 13, страница 1 из 1
Как зафиксировать соединение в плане
    #39919203
Slava_Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть примерно такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
INTO #QUERY_RESULT
	FROM query_result qr
	 LEFT    OUTER  JOIN (
					SELECT DISTINCT tran_num
					FROM dw_pnl_detail_results pnl
					 INNER  join dw_extraction_log el ON pnl.extraction_id = el.extraction_id
					WHERE el.system_date = @eodDate
					) t ON (qr.unique_id = @unique_id AND qr.query_result = t.tran_num)
	WHERE unique_id = @unique_id AND tran_num IS NULL -- option (HASH JOIN )



Хороший план соединяет через HASH query_result с результатом подзапроса, но иногда он слетает , в итоге идет Nested Loops,
Как мне его зафиксировать?
Если пишу LEFT OUTER JOIN , то два раза создает хеш. результат не очень хороший, если пишу OPTION(HASH JOIN) , то он делает HASH JOIN для всех соединение, в том числе и в подзапросе, что не надо.
Приложил файлик, красным выделен плохой план
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919204
Slava_Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
план при option (HASH JOIN)
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919205
Фотография Shakill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava_Nik,

а если написать не хинт запроса в конце, а хинт соединения в нужном месте? (LEFT OUTER HASH JOIN)
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919343
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava_Nik,

пишите не через опцию, а через join (см справку).
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919462
Slava_Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если я пишу LEFT OUTER HASH JOIN, то план так же не оптимальный , он делает две hash таблицы, как указано в моем втором сообщении,
Немного ошибся в описание, но LEFT OUTER HASH JOIN сразу пробовал.
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919470
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava_Nik
если я пишу LEFT OUTER HASH JOIN, то план так же не оптимальный , он делает две hash таблицы, как указано в моем втором сообщении,
Ну и напишите в нужных местах left hash join и inner loop join
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919471
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava_Nik,


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
INTO #QUERY_RESULT
	FROM query_result qr
	 LEFT OUTER  HASH JOIN (
					SELECT DISTINCT tran_num
					FROM dw_pnl_detail_results pnl
					 INNER LOOP JOIN dw_extraction_log el ON pnl.extraction_id = el.extraction_id
					WHERE el.system_date = @eodDate
					) t ON (qr.unique_id = @unique_id AND qr.query_result = t.tran_num)
	WHERE unique_id = @unique_id AND tran_num IS NULL
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919513
max44
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava_Nik,

посмотрите в сторону
Код: sql
1.
sp_create_plan_guide
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919547
Slava_Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так же делал, уже упоминал, создается вторая HASH таблица Aggregate, скорость запроса падает
Про план guide sp_create_plan_guide знаю, но хочется его зафиксить хинтами
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919556
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava_Nik
HASH таблица Aggregate
У вас distinct, поэтому и создается. И это не таблица.
Не нравится hash - укажите option (order group). Получите сортировку + Stream Aggregate.
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919559
Slava_Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

спасибо, вроде лучше, но все равно не как хороший вариант.
Сортировка идет до HASH , и соответсвенно данных больше и ресурсов больше
, как сортировку опубликовать после HASH
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919562
Slava_Nik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava_Nik,

план таков
...
Рейтинг: 0 / 0
Как зафиксировать соединение в плане
    #39919582
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Slava_Nik,

перепишите запрос на not exists () и уберите distinct. Дублирование qr.unique_id = @unique_id лишнее в исходном варианте.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как зафиксировать соединение в плане
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]