Какво е разделена таблица на Oracle?
Разделянето на дялове разделя таблица, индекс или организирана от индекс таблица на по-малки компоненти. Всеки компонент се нарича дял (или подраздел за композитни разделени обекти). Всеки дял има уникално име и по избор може да има индивидуални характеристики за съхранение:примерите включват компресия или съхраняване в различни пространства за таблици. Една добре проектирана стратегия за разделяне може да подобри достъпа до заявки и актуализации, като ограничи операцията до един или поднабор от дялове.
Разделяне на дялове за производителност – Подрязване на дял
Функцията на Oracle Partitioned table позволява на оптимизатора на заявки да пропуска дялове, които не се изискват от конкретен SQL израз. В зависимост от SQL израза, оптимизаторът може да идентифицира дялове и подраздели, които трябва да бъдат достъпни, както и такива, които не го правят. Това може да доведе до съществени подобрения в производителността на заявките, тъй като оптимизаторът се фокусира върху специфичен подмножество от данни, които могат да бъдат прецизирани допълнително, ако съществуват допълнителни предикати.
Оптимизаторът прави това, като използва информацията за дяла, съхранявана в речник на данни за идентифициране на съдържанието на дял, без да се правят заявки за данните, които съдържа. Разделянето е допълнителен слой от речника на данните между таблици/индекси и пространства за таблици
Ограничение на разделена таблица
В Oracle Database 11g една таблица може да има максимум 1048575 (1024K – 1) дяла. С единственото изключение на таблици, съдържащи колони от LONG или LONG RAW типове данни, всички таблици могат да бъдат разделени (включително колони от тип CLOB или BLOB).
Тип дялове на таблица
Разделянето на дялове е достъпно в базата данни на Oracle от версия 8.0 и Oracle непрекъснато добавя все повече и повече функции с всяка версия. Следващата таблица показва обобщение на основните промени
Основната стратегия за дялове, дадена от Oracle, са
(1)Обхват
(2)Списък
(3) Хеш
(4)Съставен
Как да създадете таблицата на дяловете
В зависимост от видовете дялове, ето начинът за създаване на таблицата на дяловете
Разделяне на диапазон
Oracle разделя данните въз основа на последователни диапазони от стойности на ключа на дяла.
Крайната точка на всеки дял се посочва с помощта на следния синтаксис:
СТОЙНОСТИ ПО-МАЛКИ ОТ (списък със стойности)
Пример
СЪЗДАВАНЕ НА ТАБЛИЦА EXP_RANGE (ID NUMBER(15) НЕ NULL, CODE_ID NUMBER(15) НЕ NULL, PERIOD_NAME VARCHAR2(15) НЕ NULL, ACTUAL_FLAG VARCHAR2(1) NOT NULL, VERSION_ID LAST NUMBER,NOTNULL DATE(15) . . . . . ) РАЗДЕЛЯНЕ ПО ДИАПАЗ (ИМЕ_ПЕРИОД) ( СТОЙНОСТИ PR1 НА ДЯЛА, ПО-МАЛКИ ОТ ('ЯНВАРИ-2019'), ДЯЛ PR2 СТОЙНОСТИ ПО-МАЛКИ ОТ ('ФЕВ-2019') . . . . . . . . .); );>Разделянето на диапазон е полезно за разделяне на исторически данни и данни за транзакции, тъй като границите на дяла на диапазона определят реда на дял в таблици и индекси
Разделяне на списъци
При този метод oracle картографира конкретни редове в дялове въз основа на статичен списък от литерални стойности. Ключът на дяла за разделяне на списък може да се основава само на една колона.
СЪЗДАВАНЕ НА ТАБЛИЦА EXP_LIST (ИД НОМЕР НЕ НУЛЕН, ORG_ID NUMBER, OPEN_FLAG VARCHAR2(4) НЕ НУЛЕН, . . . . . . ) ДЯЛ ПО СПИСЪК (open_flag) ( PARTITION PR1 STOстойности),2 PARTITIONS VALUES ('YES'PR) „НЕ“) );Разделяне на хеш
В този оракул се използва алгоритъма за хеширане, за да се реши физическото разположение на данните. Хеш разделянето ще разпредели данните равномерно между фиксиран брой дялове.
СЪЗДАВАНЕ НА ТАБЛИЦА EXP_HASH (ИД НОМЕР НЕ НУЛЕН, ORG_ID NUMBER, ORDERED_ITEM VARCHAR2(2000), OPEN_FLAG VARCHAR2(1) НЕ НУЛВ, . . . . . . ) ДЯЛ ПО ХЕШ (ID) 10 ЧАСТ. . . . . .; );Съставно разделяне
В този оракул е използвана комбинацията от диапазон, списък и хеш разделяне. Композитните методи за разделяне са диапазон-хеш или диапазон-списък.
CREATE TABLE sales_details ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE , channel_id VARCHAR2(1) , promo_id NUMBER(6) , quantity_sold NUMBER(3) , amount_sold NUMBER(10,2) BYRAN PARTITION) ) ) ПОДРАЗДЕЛЕНИЕ ПО ХЕШ (cust_id) ПОДРАЗДЕЛИ 8 СЪХРАНЯВАНЕ В (ts1, ts2, ts3, ts4) ( PARTITION sales_q1_2019 СТОЙНОСТИ ПО-МАЛКИ ОТ (TO_DATE('01-APR-2019','dd-MON-APR-2019','dd-MON-YLES, PARTITION) sales_q1_2019') ПО-МАЛКО ОТ (ДО_ДАТА('01-ЮЛ-2019','дд-ПОН-гггг')) , PARTITION sales_q3_2019 СТОЙНОСТИ ПО-МАЛКИ ОТ (ДО_ДАТА('01-ОКТ-2019','дд-ПОН-гггг')) , ДЯЛ sales_q4_2019 СТОЙНОСТИ ПО-МАЛКИ ОТ (ДО_ДАТА('01-ЯНВ-2019','дд-ПОН-гггг')) );Как да преместя съществуващия обект в Разделен обект
Има много начини да постигнете този подвиг. Тук обяснявам опростения метод
1. Създайте празна разделена таблица, използвайки клаузата partitioned и с опцията за паралел. Името на таблицата трябва да има различно име от неразделената таблица.
2.Попълнете данни за необходимия дял от неразделената таблица.
3. Помислете за използването на подсказката за оракул APPEND с израз INSERT като лесна промяна на кода, която осигурява добра производителност. Ако регистрирането е разрешено и са налице индекси, съветът INSERT /*+ APPEND */ може да не е ефективен. За да сведете до минимум разходите за поддръжка на индекси, пуснете индексите преди миграцията и ги създайте отново, след като разделената таблица бъде попълнена.
4.Преименувайте разделената таблица на същото като оригиналната таблица или променете синонима.
5. Създайте индекси на таблицата за разделената таблицаСъщо чете
Oracle Partition Index
Oracle Parallel Query
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm