Иметь один запрос, где GTT (несколько 100 записей) внутренне соединены с основной таблицей.
ex :
insert into table1 select col2,col3 from gtt,maintable where gtt.id=maintable.id .. few other joins
Запрос занимает около 15-20 минут для загрузки в table1, но когда я передаю значение таблицы GTT в коде hardcode в запросе, он завершается через 4-5 минут.
в чем здесь основное отличие, есть ли способ улучшить производительность с помощью GTT (нельзя избежать GTT, потому что иногда значения могут быть больше 1000)
Пробовал ниже 1. удалено внутреннее присоединитесь и замените предложением IN (где IN (выберите идентификатор из GTT), но не повезло 2. добавили push_subq и удалите HINT с подзапросом (вариант 1), но не повезло
PLAN
with GTT
| 74 | NESTED LOOPS |
| 75 | BUFFER SORT |
| 76 | PX RECEIVE |
| 77 | PX SEND BROADCAST | :TQ20006
| 78 | SORT UNIQUE |
| 79 | PX RECEIVE |
| 80 | PX SEND HASH | :TQ20005
| 81 | PX BLOCK ITERATOR |
| 82 | TABLE ACCESS STORAGE FULL | STAGE_GTT
| 83 | PX PARTITION HASH ITERATOR |
| 84 | TABLE ACCESS STORAGE FULL | EXP_TABLE =====>103GB == cell offloaded 95%
With literal
129 | PX SEND HASH | :TQ20006
130 | HASH JOIN |
131 | PX PARTITION HASH INLIST |
132 | VIEW |
133 | TABLE ACCESS STORAGE FULL | EXP_TABLE ====(27GB ) ==cell offloaded 98%