Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Пытаясь оптимизировать один сложный запрос столнулся с неодназным поведением оптимизатора при построении Плана запроса. Суть: надо заставить таблицы (в реале вьюшки, но я буду упрощать где можно) соединяться с right outer hash join в определенном порядке. При нормальных параметрах сервер сам выстраивает подобное соединение и использует фильтр по всем таблицам. Но когда я пытаюсь заставить его использовать только right hash хинтом, сервер использует фильтр лишь на основной таблице, что приводить к дикому сканированию по остальным. Попытался воспроизвести простой пример на основе этой статьи . код: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. версия: 2008R2 (10.50.6529.0) В моем реальном случае использовать первый вариант нет возможности. Вопрос: почему сервер тупит в такой очевидной ситуации? и как его заставить? Подскажите, пожалуйста, в какую сторону копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 05:14 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Idol_111, У меня пятничный затуп наверное, но в примере 1, когда условие на Т3 помещается в where, соотв. внешний джойн разве не превращается во внутренний? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 05:34 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Ennor TiegaelIdol_111, У меня пятничный затуп наверное, но в примере 1, когда условие на Т3 помещается в where, соотв. внешний джойн разве не превращается во внутренний? в этом простом случае он превращается в inner join, ну так ничего не мешает так же сделать и во 2м случае. Разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 05:43 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Idol_111, У вас там 3 неиндексированные кучи, и вы джойны гвоздями прибивать пытаетесь. Может, сначала с индексами поколдовать? Оно и оптимизатору попроще будет, и вам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 07:06 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Ennor TiegaelIdol_111, У вас там 3 неиндексированные кучи, и вы джойны гвоздями прибивать пытаетесь. Может, сначала с индексами поколдовать? Оно и оптимизатору попроще будет, и вам. Спасибо за совет, за индексы не беспокойтесь, я не первый раз оптимизацию провожу :). Вы лучше по существу чего-нибудь предложите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 07:11 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Idol_111, ну если я правильно понимаю, то пробовать убрать HASH из JOIN и хинт OPTION(HASH JOIN) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 09:52 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 10:54 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
invm Код: sql 1. 2. 3. 4. 5. 6. 7. ?А зачем здесь LEFT, если T1.b < 100 выбрасывает все NULLы, порождённые LEFT JOINом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 17:57 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
iapА зачем здесь LEFT, если T1.b < 100 выбрасывает все NULLы, порождённые LEFT JOINом?Об этом надо ТС'а спрашивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2018, 18:28 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
invmiapА зачем здесь LEFT, если T1.b < 100 выбрасывает все NULLы, порождённые LEFT JOINом?Об этом надо ТС'а спрашивать.Собственно, я и спросил. Ответ, правда, немного загадочен. Возможно, ТС не видит разницы между его 2-мя запросами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.09.2018, 11:02 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
похоже я как то не достаточно "разжевал" суть проблемы. Простой пример из ссылки (где можно найти коды для создания таблиц и самому все протестировать) лишь показывает, на мой взгляд, не достаточно "умное" поведение сервера при построении запроса. Кажется, что когда используются хинты сервер перестает понимать что T3.a = T1.b и можно использовать фильтр по обеим таблицам. Мой случай гороздо сложнее (поэтому речь не о нем сейчас), там 9 вьюшек вложенных (5уровней) и соединенных сложным образом с кучей условий на каждой. Кстати, поэтому не могу использовать OPTION(HASH JOIN) - View. И самая проблематичная вьюха как раз и состоит в основном из 8 LEFT joins, но при построение "хорошего" плана сервер соединяет их через RIGHT OUTER JOIN. Что я и попытался возпроизвести жестко задав все хинтами и переписав вьюху чуток. Однако, в таком случае сервер отказывается использовать фильтры, которые заданы в конечном скрипте. Т.е. когда сам строит план использует фильтры, а когда с хинтами, уже не хочет и выходит жесткий скан по куче таблиц. К примеру, вместо чтения 108 строк по таблице (когда с фильтром) идет скан 12 млн. строк. Мой вопрос был: возможно ли победить подобную тупизну или нет? Для тех кто сам хочет проверить и дан был простой пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 02:07 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Ennor TiegaelВозможно, ТС не видит разницы между его 2-мя запросами. А вот здесь поподробней пожалуйста. И какова разница между этими двумя запросами? Неужели результат? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 02:24 |
|
||
|
right hash join и фильтр
|
|||
|---|---|---|---|
|
#18+
Idol_111Ennor TiegaelВозможно, ТС не видит разницы между его 2-мя запросами. А вот здесь поподробней пожалуйста. И какова разница между этими двумя запросами? Неужели результат? :)Вы не поверите: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2018, 05:15 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39696406&tid=1689175]: |
0ms |
get settings: |
7ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
140ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
2ms |
| others: | 228ms |
| total: | 476ms |

| 0 / 0 |
