SQL Oracle оператор оптимизирован с временной таблицей - PullRequest
1 голос
/ 26 августа 2009

Я оптимизировал сложный оператор Oracle, используя временную таблицу, подобную этой:

оригинал :

SELECT data FROM table WHERE ..complex statement..;

оптимизировано (я не могу использовать ключевое слово WITH, потому что имею дело с

CREATE GLOBAL TEMPORARY TABLE temptab (x NUMBER, y DATE) ON COMMIT DELETE ROWS;<br> INSERT INTO temptab SELECT * FROM temp;<br> SELECT data FROM temptab WHERE ..complex statement..;<br> COMMIT;

Проблема в том, что я должен выполнить эти операторы в новой базе данных. Лучше отбросить и создать временную таблицу, либо урезать ее, только если она существует? Как я могу справиться с этой дополнительной таблицей?

Ответы [ 2 ]

4 голосов
/ 26 августа 2009

Данные вашей временной таблицы видны только в рамках транзакции.

После принятия или отката транзакции (или отключения и повторного подключения) данные исчезают.

Вам не нужно создавать таблицу каждый раз, когда вы запускаете запрос: просто создайте ее один раз.

TRUNCATE в Oracle - это операция DDL (она фиксирует транзакцию, в которой выполняется).

0 голосов
/ 27 августа 2009

Временные таблицы не занимают память в ваших файлах данных. Временные таблицы выделяют память ваших временных сегментов. Память освобождается после завершения сеанса или транзакции.

Усечение временных таблиц не требуется. Создайте один раз и используйте его. Без печали.

Подробнее о временных таблицах здесь .

...