|
|
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
hi all LI-T3.0.0.31071. Радость от тотального превосходства HJ над NL была недолгой... DDL: Код: plaintext 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. 27. 28. 29. 30. 31. Кардинальности: Код: plaintext 1. 2. 3. 4. Тепеь делаю SQL> set plan on; SQL> set explain on; - и далее три запроса. var-1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. var-3. Пытаюсь обмануть оптимизатор, задавая условие соединения без строго равенства (чтобы он не соблазнялся на HJ): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. И получаю почти то же самое в трейсе, что с HJ: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. По варианту-2 вопрос простой: там ничего не менялось в HJ в последнее время ? Ибо я стопудово проверял (месяца 2 взад) какой-то очень близкий к этому раскладу запрос, и там было всё пучком. По варианту-3 вопрос тоже очевидный: с каког будуна ведущим источником берется тот, что имеет 1002 строки, вместо того, что будет иметь всего 1 строку (я про dbg_list h join dbg_data d on d.doc_id = h.id - см выше) ? PS. Только не пинайте, что запросы с left join vs inner join не эквивалентны. Ну добавлю я юнионом недостающие записи (хотя особенности схемы гарантируют, что их не будет) - что дальше-то, всё равно огребаем тормоза. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 18:58:52 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 19:14:55 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
фишка в том, что если "материализовать" вьюху в виде таблицы: Код: plaintext 1. 2. 3. 4. 5. - то здесь уже inner-соединение летает - PLAN JOIN (H NATURAL, D INDEX (DBG_DATA_FK), N INDEX (G_DBG_LOG_PK)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 19:21:32 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
Таблоид, фишка в том что сейчас оптимизатор не оценивает кардинальность DT, если она сложная (group by, rows ...). Об этом кстати dimitr писал и вроде в тройке это постараются сделать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 19:26:35 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
Симонов Денисфишка в том что сейчас оптимизатор не оценивает кардинальность DT, если она сложная (group by, rows ...). Об этом кстати dimitr писал и вроде в тройке это постараются сделатьВо-во! я порывался сообщить об этом смутном сомнении, но подумкал, что это он только про выборки из SP говорил. А чему тогда он принимает равной кардинальность вьюх, основанных на group by ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 19:38:45 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 19:43:31 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
Денис, спс! У мну "в избранном экселе" тынц на этот пост отсутствовал, к сож-ю. Однако, ввиду:dimitrпока не обещаю решения даже в рамках 3.0 (хотя и очень хочется).- пойду поубиваюсь ап стенку: надо теперь везде такие джойны выискивать... :'( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 19:57:43 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
Таблоид, ну этот пост был 4 года назад. Кроме dimitr'а никто не знает в каком состоянии сейчас оптимизатор его приватных сборках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 20:01:14 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
Кажись, вот это:dimitr, http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=789386&msg=9433375 сравнение на основе стоимостей происходит только для выборок из таблиц. Если же один из участников джойна агрегат или юнион или процедура, то никакой стоимостной оценки нет. Джойн тупо начинается с этих "сложных" потоков. И только при left join, когда порядок поменять нельзя и "сложный" поток априори стоит вторым, тогда уже оптимизатор пытается хоть как-то улучшить ситуацию, пропихивая предикаты внутрь .- надо "отливать в граните" (ц). Ибо даже если оптимизатор удаётся обмануть и заставить выбрать "сложный" поток ведомым , то предикат при INNER join'e он всё равно не протолкнёт. Только при LEFT. Вот повтор варианта-3 из стартового поста: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Ведушим источником выбрана вьюха, тут со статистикой всё плохо (см выше). ---------------------------- А вот дурилка картонная: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. trace Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 21:06:47 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
ТаблоидПорядок соединения поменялся, но предикат так и остался за бортом а вот это похоже на багу, предикат для ведомого потока должен проталкиваться независимо от LEFT/INNER. Если занесешь в трекер, то попытаюсь исправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 21:51:07 |
|
||
|
Провал HJ и inner-NL в случае соед-я малых таблиц и вьюхи от group-by
|
|||
|---|---|---|---|
|
#18+
dimitrТаблоидПорядок соединения поменялся, но предикат так и остался за бортом а вот это похоже на багу, предикат для ведомого потока должен проталкиваться независимо от LEFT/INNER. Если занесешь в трекер, то попытаюсь исправить. Занёс , но как обычно - с сильным акцентом. Так уж вышло.... :-[ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2014, 22:29:30 |
|
||
|
|

start [/forum/topic.php?fid=40&gotonew=1&tid=1563672]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
209ms |
get topic data: |
6ms |
get first new msg: |
3ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 502ms |

| 0 / 0 |
