«Я просто делаю пример здесь, так как не могу вставить исходный запрос ради законности»
Справедливо, но совет, который мы вам дадим, будет настолько же хорош, насколько и информация, которую вы нам дадите. Пока ничего из того, что вы опубликовали, не говорит о том, что вам нужно создавать разделы.
Вставленный запрос будет работать хорошо с составным индексом и, вероятно, выиграет от сжатия ведущего столбца:
create index your_table_lookup_index
on your_table(ObjectID, patentnumber) compress 1;
Если это уникальная комбинация, сделайте индекс уникальным.
как включить автоматическое разбиение в столбце целых чисел
Однако, если вы считаете, что у вас есть подлинный вариант использования для разбиения на разделы, тогда мы можем использовать разделение на интервалы с целыми числами, а также с датами. Этот оператор создаст таблицу, разделенную на objectid
с разделением для каждых десяти значений.
create table your_table (
objectid number,
patentnumber number,
created_date date
)
partition by range (objectid)
interval (10)
(
partition p_00010 values less than (10)
);
В ваших опубликованных данных это будет около 400 разделов с примерно 225000 строк на раздел. Это хороший выбор? Кто может подсказать? Вы знаете свои данные и свои варианты использования, а мы нет: возможно, лучше будет раздел на objectid
(то есть с interval (1)
).
У вас уже есть таблица, поэтому вам нужно разбить ее на разделы. Стандартный способ сделать это будет
- создайте новую таблицу с вашей стратегией разделения (как выше), но с разделом по умолчанию в диапазоне
values less than (MAXVALUE)
- использовать обмен разделами, чтобы переместить существующие данные таблицы в новый
структура
- удалить старую таблицу и переименовать таблицу в старую таблицу; разрешить
внешние ключи и другие зависимости.
- итеративно разбивает раздел на требуемый диапазон
Это довольно трудоемкий процесс. Вы отметили свой вопрос [oracle12c]
; Если вы используете Oracle 12c R2, вам определенно стоит взглянуть на механизм онлайн-конвертации, который представляет собой одну команду. Узнать больше .
Помните, что разделение на части для производительности - сложная игра. Хотя он может улучшить запросы, которые возвращают большое количество строк, выровненных по ключу раздела, он может не иметь никакого значения для других запросов или даже ухудшать их производительность. В частности, любой запрос, который не включает ключ разделения (objectid
в вашем случае), вероятно, будет работать хуже после разбиения таблицы.
Окончательно в стороне: как вы знаете, но в интересах будущих искателей, разделение является платной доплатой к лицензии Enterprise Edition. Нам не разрешено использовать его, если мы не заплатили за него.