Ваш подход к разбиению по PROGRAM
и подразделению по BILL_SUBMISSTION_DATE
звучит хорошо.
Я не проверял различия в производительности (я думаю, что они будут незначительными), но для кодирования INTERVAL
опция, на мой взгляд, упрощает запросы и обслуживание.
В следующем примере я использовал следующее предложение раздела таблицы:
partition by range (INVOICE_MONTH) interval (numtoyminterval(1, 'MONTH'))
Пример запроса с использованием имен разделов старого стиля, запрос раздела длясчет за апрель 2012 года, предполагая, что я создал раздел с именем INV201204
для этих счетов за этот месяц:
select * from MARK_INV_HDR
partition ('INV201204');
И тот же запрос, используя INTERVAL
автоматически сгенерированные разделы:
select * from MARK_INV_HDR
where invoice_month = to_date('2012-04', 'yyyy-mm');
Преимущество более позднего запроса в том, что мне не нужно знать соглашение об именах для разделов.
Чтобы удалить самый старый раздел, один запрос и один DDL:
select to_char(min(invoice_month), 'dd-Mon-yyyy') as min_inv_dt from MARK_INV_HDR;
MIN_INV_DT
-----------
01-Apr-2012
alter table mark_inv_hdr
drop partition for (TO_DATE('01-Apr-2012', 'dd-Mon-yyyy'))
update global indexes;
РЕДАКТИРОВАТЬ:
Обновление: я забыл, что вы не можете использовать предложение INTERVAL
на подраздел;спасибо пользователю 12283435 за напоминание. При более внимательном рассмотрении вопроса выясняется, что, вероятно, нет необходимости разбивать раздел на PROGRAM
, так что просто один раздел по диапазону на BILL_SUBMISSION_DATE
с предложением INTERVAL
должен работать нормально.
Когда у вас есть небольшой набор значений, как вы делаете для PROGRAM
, нет очевидных причин для его разбиения. Типичным примером разделения по спискам, приведенным в документации Oracle, является список регионов для глобального центра обработки вызовов, так что вы можете выполнять пакетные отчеты и обслуживание по определенным регионам в нерабочее время и т. Д. Вы можете иметь глобальный битовый индекс наPROGRAM
, если вы не делаете много обновлений, если ваш запрос часто включает только один PROGRAM
. (Обновление столбца с помощью растрового индекса на короткое время заблокирует таблицу.)