Временные таблицы Oracle (global temporary table) это хороший инструмент для быстрого выполнения сложных вычислительных операций. Как следует из их названия это действительно таблицы, данные в которых хранятся временно, а именно существуют только во время жизни сессии пользователя. Операции с временными таблицами могут выполняться намного быстрее операций с обычными таблицами. Это происходит вследствие того, что временные таблицы Oracle создаются во временном сегменте данных Oracle и для них не генерируется информация в сегментах отката, фактически они создаются в режиме nologging и, по возможности, данные таких таблиц сервером Oracle стараются удерживаться в памяти.
Основное применение временных таблиц Oracle это выполнение промежуточных расчетов для сложных вычислительных задач. Часто бывает проще и быстрее выбрать некоторые данные во временную таблицу и затем выполнять запросы к полученным данным.
Основные свойства временных таблиц Oracle:
- Данные во временной таблице существуют только во время сессии пользователя
- В зависимости от типа временной таблицы данные в ней могут удаляться при выполнении фиксации или отката транзакции (опция при создании таблицы on commit delete rows), либо при при завершении сессии пользователя (опция on commit preserve rows)
- Данные, добавленные пользователем в таблицу, никогда не будут видны другими пользователями.
- Можно создавать индексы для столбцов временной таблицы, которые физически будут расположены во временном табличном пространстве.
Пример создания временной таблицы, данные которой автоматически удаляются только по окончании сессии пользователя:
create global temporary table TMP_TBL
(
COL_1 number,
COL2 date,
)
on commit preserve rows;
Пример создания временной таблицы, данные которой автоматически удаляются либо при окончании сессии пользователя, либо при выполнении фиксации (commit) или отката (rollback) транзакции в течение сессии пользователя:
create global temporary table TMP_TBL
(
COL_1 number,
COL2 date,
)
on commit delete rows;
Временные таблицы Oracle имеют следующие ограничения:
- Временная таблица не может быть index-organized (организованной по индексу)
- Временная таблица не может быть кластеризована
- Временная таблица не может быть разбита на части или партиции
- Параллельные запросы и распределенные транзакции не могут работать с временными таблицами
- У временной таблицы Oracle не может быть nested-tables (вложенных таблиц)
- Невозможно создать внешний ключ на временную таблицу Oracle, а также на обычную таблицу из временной.
- Временная таблица не может иметь статистику оптимизатора.
- Невозможно заблокировать временную таблицу целиком командой lock table, впрочем это и не требуется, так как данные такой таблицы и так доступны только для текущей сессии пользователя.
Автор видит необходимость использования временных таблиц Oracle для ускорения тех или иных расчетных задач. Многие разработчики приложений так и поступают. Однако использование индексных массивов языка PL/SQL может еще больше ускорить выполнение расчетных задач. С этой технологией можно ознакомиться в статьях
Индексные массивы в Oracle PL/SQL и
Сортировка индексных массивов Oracle PL/SQL.
Оставьте свой комментарий
Вы должны быть авторизированны, чтобы оставить комментарий.