|
|
|
не работает SUBQUERY_PRUNING с NOT EXISTS
|
|||
|---|---|---|---|
|
#18+
Всем привет. Помогите добиться нужного плана запроса. Имеем ORACLE 11.2.0.3 (тестировал так же 11.2.0.4 результат тот же) и OEBS апликуха. Имеется темповая табличка GL_POSTING_INTERIM и табличка GL_BALANCES партиционированная по period_name (много партиций около 10 лет). В GL_POSTING_INTERIM лежат данные за несколько дней ближе к текущей дате. Есть запрос который тормозит, поменять его нельзя т.к. встроен в апликуху (но хотелось бы сгенерировать другой план, например с помошью хинтов, и закрепить его с помощью бейслайна за данным запросом). Вот упрощенная версия запроса (хинт hash_aj мой) : Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. хочу добиться плана с HASH ANTI JOIN, фулсканом двух таблиц только чтобы в таблице GL_BALANCES фулсканились только партиции с PERIOD_NAME которые есть в таблице GL_POSTING_INTERIM (сейчас беруться все партиции): Код: 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. 27. Скрипты на создание таблиц прикрепил. Помогите добиться нужного плана, плиз. может быть можно как-то заставить работать BLOOM FILTER или SUBQUERY_PRUNING ? Ворк эраунды тоже приветствуются. Пока из идей есть только добавить на таблицу GL_POSTING_INTERIM CHECK constraint со списком последних актуальных периодов (тогда Оракл берет только партии из этого листа) но эта идея не очень нравиться, т.к. разные пользователи могут работать с разными периодами и иногда брать старые. Была идея сделать партиционирование по PERIOD_NAME GL_POSTING_INTERIM и добиться wise join в надежде что оракл будет видеть что партиции в GL_POSTING_INTERIM пустые и не будет читать соответствующие партиции в GL_BALANCES, но она темповая (партиционирование не поддерживается). Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 18:46 |
|
||
|
не работает SUBQUERY_PRUNING с NOT EXISTS
|
|||
|---|---|---|---|
|
#18+
После публикации не увидел прикрепленный файл, поэтому дубль два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 18:51 |
|
||
|
не работает SUBQUERY_PRUNING с NOT EXISTS
|
|||
|---|---|---|---|
|
#18+
а данные из тех партиций, которые ты не хочеш, по-твоему не попадают под условие чтоли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 19:26 |
|
||
|
не работает SUBQUERY_PRUNING с NOT EXISTS
|
|||
|---|---|---|---|
|
#18+
Alpdrucken, там джойн по B.period_name = PI.period_name. Соответственно читать партиции в "B", которых нет в "PI" нет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 22:18 |
|
||
|
не работает SUBQUERY_PRUNING с NOT EXISTS
|
|||
|---|---|---|---|
|
#18+
Показалось что временная таблица в подзапросе. Попробуй добавить в подзапрос условие Код: plsql 1. у меня подхватил одну партицию по которой были все данные в темпе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 10:49 |
|
||
|
не работает SUBQUERY_PRUNING с NOT EXISTS
|
|||
|---|---|---|---|
|
#18+
Запрос встроен в апликуху, менять текст нет возможности. Задумка добиться нужно плана и подсунуть его под существующий запрос с помошью бейслайна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 11:41 |
|
||
|
не работает SUBQUERY_PRUNING с NOT EXISTS
|
|||
|---|---|---|---|
|
#18+
niv76, а NL по уникальному локальному индексу GL_BALANCES_N1 до первого вхождения не быстрей получается? Судя по плану в GL_POSTING_INTERIM всего 20 строчек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 15:17 |
|
||
|
не работает SUBQUERY_PRUNING с NOT EXISTS
|
|||
|---|---|---|---|
|
#18+
Нет, там статистики нет, работает динамический семплинг. Табличка временная. Делал план на пустой таблице. В реалии там чуть меньше 1млн строк, и в нужной GL_BALANCES 1...20 млн строк в зависимости от дня месяца. Думаю побить на ежедневные партиции, тогда 1млн будет сравниваться с 1 миллионом, поэтому быстрее будет фулскан + hash_aj. Только лишние партиции не хочется читать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 22:27 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=152&tid=1885493]: |
0ms |
get settings: |
8ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
335ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 653ms |

| 0 / 0 |
