|
Как заставить оптимизатор применить план к запросу от другого запроса
|
|||
---|---|---|---|
#18+
Есть запрос: select ... from TBL1 ... создаю копию таблицы TBL1, называю TBL2 делаю точно такой же запрос, но уже с TBL2 select ... from TBL2 ... Запрос выполняется значительно дольше чем 1-й хотя таблицы одинаковые, данные в них тоже. Смотрю планы 1 и 2 запросов, они отличаются, т.е. во 2-м случае оптимизатор почему то выполняет по другому плану. Как заставить оптимизатор применить план выполнения от 1-го запроса ко 2-му, вернее для 2-го создать такой же план как у 1-го, только заменить в нём имена таблиц и индексов? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 14:29 |
|
Как заставить оптимизатор применить план к запросу от другого запроса
|
|||
---|---|---|---|
#18+
verter Есть запрос: select ... from TBL1 ... создаю копию таблицы TBL1, называю TBL2 делаю точно такой же запрос, но уже с TBL2 select ... from TBL2 ... Запрос выполняется значительно дольше чем 1-й хотя таблицы одинаковые, данные в них тоже. Смотрю планы 1 и 2 запросов, они отличаются, т.е. во 2-м случае оптимизатор почему то выполняет по другому плану. Как заставить оптимизатор применить план выполнения от 1-го запроса ко 2-му, вернее для 2-го создать такой же план как у 1-го, только заменить в нём имена таблиц и индексов? Каким образом создается вторая таблица? Создаешь командой Код: plsql 1. 2.
или скриптом? Есть ли индексы на обеих таблицах? Собрана ли статистика по первой и второй таблице? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 14:38 |
|
Как заставить оптимизатор применить план к запросу от другого запроса
|
|||
---|---|---|---|
#18+
flexgen, Нет, создаю скриптом create table tbl2 (поля .... ) создаю индексы Да, индексы имеются на TBL1 и на TBL2 создаю такие же индексы с другими, конечно, именами. Статистики по таблицам специально не собирал. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 14:41 |
|
Как заставить оптимизатор применить план к запросу от другого запроса
|
|||
---|---|---|---|
#18+
verter flexgen, Нет, создаю скриптом create table tbl2 (поля .... ) создаю индексы Да, индексы имеются на TBL1 и на TBL2 создаю такие же индексы с другими, конечно, именами. Статистики по таблицам специально не собирал. А чего так? Попробуй собрать и посмотри изменятся ли планы по обоим таблицам. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 14:49 |
|
Как заставить оптимизатор применить план к запросу от другого запроса
|
|||
---|---|---|---|
#18+
попробывал создать скриптом: create table tbl2 as select * frim tbl1 потом добавил индексов не помогло - запрос к tbl2 выполняется по другому плану и значительно дольше. Таблицы часто обновляются, в них заливаются миллионы записей. Наверное имеет смысл закрепить статистику по таблице и индексам и не собирать её? Но как это поможет в том чтобы заставить оптимизатор выполнять запрос ко 2-й таблице по плану запроса к 1-й? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.09.2021, 14:56 |
|
Как заставить оптимизатор применить план к запросу от другого запроса
|
|||
---|---|---|---|
#18+
verter, Планы покажите ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2021, 20:59 |
|
Как заставить оптимизатор применить план к запросу от другого запроса
|
|||
---|---|---|---|
#18+
feagor verter, Планы покажите feagor, на самом деле в запросе соединяются 3 таблицы: для 1-го запроса: TBL_11, TBL_12, TBL_13 для 2-го запроса: TBL_21, TBL_22, TBL_23 все таблицы 2-го запроса и данные в них идентичны таблицам из 1-го, только называются по-другому и индексы, соответственно, тоже. хорощий план (1 запрос): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
плохой план (2 запрос): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2021, 22:13 |
|
Как заставить оптимизатор применить план к запросу от другого запроса
|
|||
---|---|---|---|
#18+
verter, verter создаю копию таблицы TBL1, называю TBL2 все ли констрейнты создали? Все not null столбцы исходной таблицы объявлены как not null? verter оптимизатор почему то выполняет по другому плану. verter Как заставить оптимизатор применить план выполнения от 1-го запроса ко 2-му, вернее для 2-го создать такой же план как у 1-го, только заменить в нём имена таблиц и индексов? dbms_stats.export_table_stats(...), update stattab set table_name..., dbms_stats.import_table_stats(...) Второй: взять аутлайны первого запроса, подправить и зафиксировать на втором запросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2021, 01:26 |
|
|
start [/forum/topic.php?fid=52&msg=40095378&tid=1879926]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
171ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 281ms |
0 / 0 |