artzub
@artzub
Программист

Как правильно разбить таблицу на partition в Oracle?

Есть таблица, в которой больше 100 млн записей.
Структура таблицы GoodsList:
ID_DATETIME NUMBER
ID_SUPPLIER NUMBER
ID_CLIENT NUMBER
ID_PRICEITEM NUMVER
COST NUMBER

1. Как ее правильно разбить на partition по date, если чаще всего отчеты делаются за текущий месяц? И стоит ли делать допустим такое разбиение partition по году затем в subpartition по месяцам.

2. Можно ли создание новой партиции сделать автоматическим согласно критерия деления?

3. Если структуру перестроить разбить данную таблицу на две.
В первую GoodsListHead:
ID NUMBER
ID_DATETIME NUMBER
ID_PRODUCER NUMBER
ID_CLIENT NUMBER

А вторую GoodsList:
ID_GOODSLISTSHEAD NUMBER
ID_PRICEITEM NUMBER
COST NUMBER

Как в таком случае организовать partition по дате в таблице GoodsList?
  • Вопрос задан
  • 14529 просмотров
Решения вопроса 2
По вопросу 2 - можно, вот здесь есть пример, как это сделать.

По вопросу 3 - никак, непосредственно в таблице должен быть ключ, по которому происходит партиционирование (т.к. именно по нему в момент вставки / изменения записи будет определятся, в какую физически таблицу вставлять запись)
Ответ написан
xtender
@xtender
Забавно, а где сами даты? ID_DATETIME - это суррогатный ключ на дату в какой-то другой таблице?
Принципиально, если в таблице нет самого поля секционирования, а есть только суррогат на другую, то можно делать только refence partitioning, а это требует секционирования мастер-таблицы - docs.oracle.com/cd/E11882_01/server.112/e25523/partition.htm#CACIHDII

Теперь по вопросам:
1. Как ее правильно разбить на partition по date, если чаще всего отчеты делаются за текущий месяц?

Кроме отчетов, наверное, еще что-то происходит? :) в целом, необходим целый ряд исследований и тестирований, прежде чем переходить на секционирование.

И стоит ли делать допустим такое разбиение partition по году затем в subpartition по месяцам.
не стоит. Если уж режете по дате, то делайте сразу по месяцам, иначе получите лишний оверхед.

2. Можно ли создание новой партиции сделать автоматическим согласно критерия деления?
да, смотрите Interval partitioning - docs.oracle.com/cd/E11882_01/server.112/e25523/partition.htm#CACHFHHF

3. Если структуру перестроить разбить данную таблицу на две.
Снова Reference partitioning
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Не работал с Partitions, так что по этой теме не возьмусь отвечать.

Однако, если проблемы именно с построением отчетности, и требуется ускорить именно отчеты за текущий месяц, возможно, стоит попробовать Materialized Views? Не думали в эту сторону?
Ответ написан
Комментировать
Если у вас есть "конечный список" в ID_столбцах, то по нему list партицирование и range по дате. А вообще партицирование у Oracle достаточно дорогое 1/4 от Enterprise лицензии. Может быть лучше разделить на 2 таблицы (последний месяц и все остальное), переливать данные каждый месяц и обращаться к вьюшке созданой на обе при необходимости видеть все.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы