在oracle中,分區(qū)表是將大表分解為多個(gè)小的、可管理的分區(qū)表,每個(gè)分區(qū)表之間相互獨(dú)立,共同構(gòu)成了完整的表,邏輯上講只有一個(gè)表或一個(gè)索引,但在物理上這個(gè)表或索引可能由數(shù)個(gè)物理分區(qū)組成;分區(qū)表可以分為范圍分區(qū)、列表分區(qū)、哈希分區(qū)和組合分區(qū)。
本教程操作環(huán)境:windows10系統(tǒng)、Oracle 11g版、Dell G3電腦。
oracle中什么是分區(qū)表
(1)什么是分區(qū)
在Oracle數(shù)據(jù)庫(kù)中,為了提升對(duì)大表/大索引的可管理性、可維護(hù)性以及性能,Oracle引入了分區(qū)表機(jī)制,可以將大表/大索引分解為多個(gè)小的、可管理的分區(qū)。多個(gè)分區(qū)相對(duì)獨(dú)立,有獨(dú)立的存儲(chǔ)結(jié)構(gòu),共同構(gòu)成了整個(gè)完整的表/索引。分區(qū)對(duì)應(yīng)用透明,即對(duì)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用而言,邏輯上講只有一個(gè)表或一個(gè)索引(相當(dāng)于應(yīng)用看到的仍然只是一個(gè)表或索引),但在物理上這個(gè)表或索引可能由數(shù)個(gè)物理分區(qū)組成。
(2)什么時(shí)候需要分區(qū)
Oracle官網(wǎng)的建議以下情形采用分區(qū)表:
1. 表數(shù)據(jù)量大于2GB時(shí)應(yīng)該考慮使用分區(qū);
2. 新數(shù)據(jù)加入至最新分區(qū)中的用于存儲(chǔ)歷史數(shù)據(jù)的表。
(3)分表和分區(qū)表的區(qū)別
為了分散存儲(chǔ)大表/索引的數(shù)據(jù),另外一種途徑是分表,分表是將一個(gè)大表按照一定的規(guī)則分解成多張具有獨(dú)立存儲(chǔ)空間的實(shí)體表,例如可以將客戶(hù)表customer拆分成兩個(gè)表,一個(gè)用于存儲(chǔ)個(gè)人客戶(hù) customer_person,另一個(gè)存儲(chǔ)對(duì)公客戶(hù) customer_company。分表完全獨(dú)立,在邏輯上是多張不同的表,而分區(qū)表在物理上是一張表。分區(qū)表對(duì)應(yīng)用透明易于管理維護(hù),分表不易于管理維護(hù)。
(4)分區(qū)表的類(lèi)型
-
范圍分區(qū)(Range Partitioning)
-
列表分區(qū)(List Partitioning)
-
哈希分區(qū)(Hash Partitioning)
-
組合分區(qū)(Composite Partitioning)
基本分區(qū)是指僅僅使用了一層分區(qū)(范圍分區(qū)、列表分區(qū)、哈希分區(qū))的分區(qū)表。
如果對(duì)分區(qū)表進(jìn)行多層級(jí)的分區(qū),則稱(chēng)為組合分區(qū)。
范圍分區(qū)表
(1)分區(qū)鍵
分區(qū)是將非常大的表或者索引分解成多個(gè)小的、可管理的部分。分區(qū)表是通過(guò)分區(qū)鍵來(lái)分解分區(qū)的。分區(qū)鍵決定了分區(qū)表中的每一行數(shù)據(jù)流向哪個(gè)分區(qū)。分區(qū)表中的每一行數(shù)據(jù)根據(jù)分區(qū)鍵,隱式地被分配到一個(gè)分區(qū)中。
(2)范圍分區(qū)
范圍分區(qū)按照分區(qū)鍵,根據(jù)數(shù)據(jù)行落在分區(qū)鍵中不同的范圍值來(lái)劃分分區(qū)。
(3)案例1(分區(qū)鍵為單列)
CREATE TABLE time_range_sales ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE , channel_id CHAR(1) , promo_id NUMBER(6) , quantity_sold NUMBER(3) , amount_sold NUMBER(10,2) ) PARTITION BY RANGE (time_id) (PARTITION SALES_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')), PARTITION SALES_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')), PARTITION SALES_2000 VALUES LESS THAN (TO_DATE('01-JAN-2001','DD-MON-YYYY')), PARTITION SALES_2001 VALUES LESS THAN (MAXVALUE) );
推薦教程:《Oracle視頻教程》