Particionálás ============= Egy tábla fel van osztva több partícióra. Minden partíció egy-egy szegmens, kivéve ha alpartícionálás is van, mert ilyenkor egy alpartíció alkot egy szegmens-t. Ha ügyesen partícionáltuk a táblát, akkor a lekérdezésnek lehet, hogy nem kell a teljes táblát végignéznie, hanem csak egy (vagy néhány) partíciót. A felosztás történhet intervallumok alapján, hash módszerrel, vagy lista alapján. Az egyes partíciók tovább oszthatók -> SUBPARTITION (alpartíció) Példák partícionált tábla létrehozására -> cr_part_table.txt Particionált index ================== Lokális: Megpróbálja szinkronban létrehozni a tábla partíciókat és az index partíciókat. 1 tábla partíció <-> 1 index partíció Globális: Amikor nincs meg ez az összerendelés. Prefixelt: Az indexet alkotó oszloplista egy-egy prefixe tartozik egy-egy partícióba. Például ha ckod, cnev alapján indexelek, mondhatom azt, hogy az első partícióba tartozzanak azok a bejegyzések, ahol a ckod kisebb, mint 200, a másodikba azok, ahol a ckod kisebb mint 500 (de nagyobb, mint 200) Nem prefixelt: amikor nincs meg a fenti összefüggés az index oszlopok és a partícionáló oszlopok között. Ha a partícionált index lokális, annak is van előnye, ha prefixelt annak is van előnye. Ha egyik előnye sincs meg, akkor nincs értelme az indexet partícionálni. -> Nem lehet létrehozni globális, nem prefixelt indexet!!! Információk a partícionált táblákról és indexekről a katalógusban: ================================================================== DBA_PART_TABLES, DBA_PART_INDEXES, DBA_TAB_PARTITIONS, DBA_IND_PARTITIONS, DBA_TAB_SUBPARTITIONS, DBA_IND_SUBPARTITIONS, DBA_PART_KEY_COLUMNS Példák partícionált index létrehozására ======================================== -- Particionálás tartományok alapján CREATE TABLE eladasok ( szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY RANGE ( het ) (PARTITION negyedev1 VALUES LESS THAN ( 13 ) TABLESPACE users, PARTITION negyedev2 VALUES LESS THAN ( 26 ) TABLESPACE example, PARTITION negyedev3 VALUES LESS THAN ( 39 ) TABLESPACE users ) ; insert into eladasok values(100, 'Sport cikkek', 231, 2); insert into eladasok values(101, 'Irodai termekek', 1200, 3); insert into eladasok values(102, 'Eszkozok', 43, 4); insert into eladasok values(103, 'Gepek', 21, 6); insert into eladasok values(104, 'Butorok', 31, 7); insert into eladasok values(105, 'Ingatlan', 3, 8); insert into eladasok values(106, 'Szolgaltatasok', 200, 9); insert into eladasok values(107, 'Elelmiszer', 300, 40); -- ezt már nem tudja beszúrni, 40 > 39 -- Particionálás hash kulcs alapján CREATE TABLE eladasok2 (szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY HASH ( het ) (PARTITION part1 TABLESPACE users, PARTITION part2 TABLESPACE example, PARTITION part3 TABLESPACE users ) ; -- Particionálás lista alapján CREATE TABLE eladasok3 (szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY LIST ( het ) (PARTITION part1 VALUES(1,2,3,4,5) TABLESPACE users, PARTITION part2 VALUES(6,7,8,9) TABLESPACE example, PARTITION part3 VALUES(10,11,12,13) TABLESPACE users ) -- ide sem tud beszúrni > 13-at ; -- Alparticiók létrehozása partición belül (range-en belül hash) CREATE TABLE eladasok4 (szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY RANGE ( het ) SUBPARTITION BY HASH (mennyiseg) SUBPARTITIONS 3 (PARTITION negyedev1 VALUES LESS THAN ( 13 ) TABLESPACE users, PARTITION negyedev2 VALUES LESS THAN ( 26 ) TABLESPACE example, PARTITION negyedev3 VALUES LESS THAN ( 39 ) TABLESPACE users ) ; -- Range-list alparticiók létrehozása minta alapján. Ez akkor hasznos ha nagyon sok -- partíció lenne, és így nem kell őket egyesével felsorolni -- mintára vonatkozó infók: DBA_SUBPARTITION_TEMPLATES CREATE TABLE eladasok5 (szla_szam NUMBER(5), szla_nev CHAR(30), mennyiseg NUMBER(6), het INTEGER ) PARTITION BY RANGE ( mennyiseg ) SUBPARTITION BY LIST (het) SUBPARTITION TEMPLATE (SUBPARTITION lista VALUES(10,20), SUBPARTITION other VALUES(DEFAULT)) (PARTITION negyedev1 VALUES LESS THAN ( 100 ) TABLESPACE users, PARTITION negyedev2 VALUES LESS THAN ( 200 ) TABLESPACE example, PARTITION negyedev3 VALUES LESS THAN ( 300 ) TABLESPACE users ) ;