sql >> Database teknologi >  >> RDS >> Oracle

Oracle opdelt bord

Hvad er Oracle Partitioned Table?

Partitionering opdeler en tabel, et indeks eller en indeksorganiseret tabel i mindre komponenter. Hver komponent kaldes en partition (eller underpartition for sammensatte partitionerede objekter). Hver partition har et unikt navn og kan valgfrit have individuelle lagerkarakteristika:Eksempler inkluderer komprimering eller lagring i forskellige tablespaces. En veldesignet partitioneringsstrategi kan forbedre forespørgselsadgang og opdateringer ved at begrænse operationen til et enkelt eller undersæt af partitioner.

Partitionering for ydeevne – Partitionsbeskæring

Funktionen Oracle Partitioned table gør det muligt for forespørgselsoptimeringsværktøjet at springe partitioner over, der ikke kræves af en bestemt SQL-sætning. Afhængigt af SQL-sætningen kan optimeringsværktøjet identificere partitioner og underpartitioner, der skal tilgås, såvel som dem, der ikke gør det. Dette kan resultere i væsentlige forbedringer i forespørgselsydeevne, fordi optimeringsværktøjet fokuserer på en specifik delmængde af data, som kan forfines yderligere, hvis der findes yderligere prædikater.

Optimeringsværktøjet gør dette ved at bruge partitionsoplysningerne, der er gemt i dataordbog til at identificere indholdet af en partition uden at forespørge på de data, den indeholder. Partitionering er et ekstra lag af dataordbogen mellem tabeller/indekser og tabelrum

Begrænsning af opdelt tabel

I Oracle Database 11g kan en tabel maksimalt have 1048575 (1024K – 1) partitioner. Med den eneste undtagelse af tabeller, der indeholder kolonner med LONG eller LONG RAW datatyper, kan alle tabeller partitioneres (inklusive kolonner af typen CLOB eller BLOB).

Type af tabelpartitioner

Partitionering er tilgængelig i Oracle-databasen fra version 8.0, og oracle tilføjer løbende flere og flere funktioner for hver udgivelse. Følgende tabel viser en oversigt over de vigtigste ændringer

Den vigtigste partitionsstrategi givet af Oracle er
(1)Range
(2)List
(3) Hash
(4)Composite

Sådan opretter du partitionstabellen

Afhængigt af partitionstyper er her måden at oprette partitionstabellen på

Rangepartitionering

Oracle Partitioner dataene baseret på på hinanden følgende værdiområder for partitionsnøglen.
Hver partitions slutpunkt er angivet ved hjælp af følgende syntaks:

VALUES LESS THAN (value-list)

Eksempel

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')
 . . .
 . . .
 );

Områdepartitionering er nyttig til at partitionere historiske data og transaktionsdata, da grænserne for områdepartitionen definerer partitionens rækkefølge i tabeller og indekser

Listepartitionering

I denne metode kortlægger oracle specifikke rækker til partitioner, baseret på en statisk liste over bogstavelige værdier. Partitionsnøglen til listepartitionering kan kun være baseret på en enkelt kolonne.

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')
 );

Hash-partitionering

I dette orakel brugte hashing-algoritmen til at bestemme den fysiske placering af data. Hash-partitionering vil fordele data jævnt over et fast antal partitioner.

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
 . . .
 . . .;
 );

Sammensat partitionering

I dette orakel bruges kombinationen af ​​range, list og hash partitioning.composite partitioneringsmetoder er range-hash eller 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'))
  );

Sådan flyttes det eksisterende objekt til opdelt objekt

Der er mange måder at opnå denne bedrift på. Jeg forklarer her den forsimplede metode
1.Opret en tom opdelt tabel ved hjælp af den partitionerede klausul og med muligheden parallel. Tabelnavnet skal have et andet navn end den ikke-opdelte tabel.
2.Fyld data for den påkrævede partition fra den ikke-opdelte tabel.
3. Overvej at bruge APPEND orakel-tip med en INSERT-sætning som en nem kodeændring, der giver god ydeevne. Hvis logning er aktiveret, og indekser er til stede, er tippet INSERT /*+ APPEND */ muligvis ikke effektivt. For at minimere omkostningerne ved indeksvedligeholdelse skal du droppe indekser før migrering og genskabe dem, når den opdelte tabel er blevet udfyldt.
4.Omdøb den opdelte tabel til det samme som den oprindelige tabel, eller skift synonymet.
5. Byg tabelindekser til den opdelte tabel

Læser også
Oracle Partition Index
Oracle Parallel Query
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm


  1. Sådan undertrykkes INFO-meddelelser, når du kører psql-scripts

  2. Sådan finder du ud af, om der findes en værdi i en VARRAY

  3. SQL-server AlwaysOn-tilgængelighedsgrupper:Installation og konfiguration, del 2

  4. Sikkerhedskopiering af SQL-databaser med VDP Advanced SQL Agent