Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Tabela partycjonowana Oracle

Co to jest partycjonowana tabela Oracle?

Partycjonowanie dzieli tabelę, indeks lub tabelę zorganizowaną według indeksu na mniejsze składniki. Każdy składnik jest nazywany partycją (lub podpartycją dla złożonych obiektów partycjonowanych). Każda partycja ma unikatową nazwę i opcjonalnie może mieć indywidualne cechy przechowywania:na przykład kompresja lub przechowywanie w różnych obszarach tabel. Dobrze zaprojektowana strategia partycjonowania może poprawić dostęp do zapytań i aktualizacje, ograniczając operację do jednego lub podzbioru partycji.

Partycjonowanie pod kątem wydajności — czyszczenie partycji

Funkcja Oracle Partitioned table umożliwia optymalizatorowi zapytań pomijanie partycji, które nie są wymagane przez określoną instrukcję SQL. W zależności od instrukcji SQL optymalizator może zidentyfikować partycje i podpartycje, do których należy uzyskać dostęp, a także te, do których nie ma dostępu. Może to skutkować znaczną poprawą wydajności zapytań, ponieważ optymalizator koncentruje się na określonym podzestawie danych, które można dalej doprecyzować, jeśli istnieją dodatkowe predykaty.

Optymalizator robi to, korzystając z informacji o partycjach przechowywanych w słownik danych do identyfikowania zawartości partycji bez zapytania o zawarte w niej dane. Partycjonowanie to dodatkowa warstwa słownika danych między tabelami/indeksami i przestrzeniami tabel

Ograniczenie tabeli partycjonowanej

W Oracle Database 11g tabela może zawierać maksymalnie 1048575 partycji (1024K – 1). Z wyjątkiem tabel zawierających kolumny typu danych LONG lub LONG RAW, wszystkie tabele mogą być podzielone na partycje (w tym kolumny typu CLOB lub BLOB).

Typ partycji tabeli

Partycjonowanie jest dostępne w bazie danych Oracle od wersji 8.0, a Oracle stale dodaje coraz więcej funkcji z każdą wersją. Poniższa tabela przedstawia podsumowanie głównych zmian

Główne strategie partycji podane przez Oracle to
(1)Zakres
(2)List
(3) Hash
(4)Złożony

Jak utworzyć tabelę partycji

W zależności od typu partycji , oto sposób tworzenia tabeli partycji

Podział zakresu

Oracle Partition dane na podstawie kolejnych zakresów wartości klucza partycji.
Punkt końcowy każdej partycji jest określony przy użyciu następującej składni:

VALUES LESS THAN (value-list)

Przykład

CREATE TABLE EXP_RANGE
 (ID NUMBER(15) NOT NULL,
 CODE_ID NUMBER(15) NOT NULL,
 PERIOD_NAME VARCHAR2(15) NOT NULL,
 ACTUAL_FLAG VARCHAR2(1) NOT NULL,
 VERSION_ID NUMBER(15),
 LAST_UPDATE_DATE DATE NOT NULL,
 . . . . . .
 )
 PARTITION BY RANGE (PERIOD_NAME)
 (
 PARTITION PR1 VALUES LESS THAN ('JAN-2019'),
 PARTITION PR2 VALUES LESS THAN ('FEB-2019')
 . . .
 . . .
 );

Podział zakresu jest przydatny do partycjonowania danych historycznych i transakcyjnych, ponieważ granice podziału zakresu definiują kolejność partycjonowania w tabelach i indeksach

Podział listy

W tej metodzie oracle mapuje określone wiersze na partycje na podstawie statycznej listy wartości dosłownych. Klucz partycji do partycjonowania listy może być oparty tylko na jednej kolumnie.

CREATE TABLE EXP_LIST
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 OPEN_FLAG VARCHAR2(4) NOT NULL,
 . . . . . .
 ) PARTITION BY LIST (open_flag)
 (
 PARTITION PR1 VALUES ('YES'),
 PARTITION PR2 VALUES ('NO')
 );

Partycjonowanie haszujące

W tej wyroczni użył algorytmu mieszającego do decydowania o fizycznym rozmieszczeniu danych. Partycjonowanie haszujące spowoduje równomierne rozłożenie danych na ustaloną liczbę partycji.

CREATE TABLE EXP_HASH
 (ID NUMBER NOT NULL,
 ORG_ID NUMBER,
 ORDERED_ITEM VARCHAR2(2000),
 OPEN_FLAG VARCHAR2(1) NOT NULL,
 . . . . . .
 )
 PARTITION BY HASH (ID)
 PARTITIONS 10
 . . .
 . . .;
 );

Partycjonowanie kompozytowe

W tej wyroczni użyto kombinacji range, list i hash partitioning.composite metodami partycjonowania są range-hash lub range-list.

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)
   )
  PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
   SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4)
  ( PARTITION sales_q1_2019 VALUES LESS THAN (TO_DATE('01-APR-2019','dd-MON-yyyy'))
  , PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019','dd-MON-yyyy'))
  , PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019','dd-MON-yyyy'))
  , PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy'))
  );

Jak przenieść istniejący obiekt do obiektu podzielonego na partycje

Jest wiele sposobów na osiągnięcie tego wyczynu. Wyjaśniam tutaj uproszczoną metodę
1. Utwórz pustą tabelę partycjonowaną za pomocą klauzuli partycjonowanej i opcji równoległej. Nazwa tabeli musi mieć inną nazwę niż tabela niepartycjonowana.
2.Wypełnij dane dla wymaganej partycji z tabeli niepartycjonowanej.
3. Rozważ użycie wskazówki APPEND oracle z instrukcją INSERT jako łatwej zmiany kodu, która zapewnia dobrą wydajność. Jeśli rejestrowanie jest włączone, a indeksy są obecne, wskazówka INSERT /*+ APPEND */ może nie być skuteczna. Aby zminimalizować obciążenie związane z konserwacją indeksów, usuń indeksy przed migracją i utwórz je ponownie po zapełnieniu tabeli partycjonowanej.
4. Zmień nazwę tabeli partycjonowanej na taką samą jak tabela oryginalna lub zmień synonim.
5. Zbuduj indeksy tabeli dla tabeli partycjonowanej

Też czyta
Indeks partycji Oracle
Równoległe zapytanie Oracle
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. utl_file.fopen Parametry w Oracle

  2. Dlaczego otrzymuję wyjątek OutOfRange w funkcji GetOrdinal tego pola CLOB?

  3. Jak nadać unikalne ograniczenie kombinacji kolumn w Oracle?

  4. Pytania dotyczące Oracle DBA w czasie rzeczywistym

  5. Funkcja pozwalająca na uzyskanie liczby dni tygodnia pomiędzy dwiema datami z wyłączeniem świąt