在oracle中,分區(qū)表是將大表分解為多個小的、可管理的分區(qū)表,每個分區(qū)表之間相互獨立,共同構(gòu)成了完整的表,邏輯上講只有一個表或一個索引,但在物理上這個表或索引可能由數(shù)個物理分區(qū)組成;分區(qū)表可以分為范圍分區(qū)、列表分區(qū)、哈希分區(qū)和組合分區(qū)。
本教程操作環(huán)境:windows10系統(tǒng)、Oracle 11g版、Dell G3電腦。
oracle中什么是分區(qū)表
(1)什么是分區(qū)
在Oracle數(shù)據(jù)庫中,為了提升對大表/大索引的可管理性、可維護性以及性能,Oracle引入了分區(qū)表機制,可以將大表/大索引分解為多個小的、可管理的分區(qū)。多個分區(qū)相對獨立,有獨立的存儲結(jié)構(gòu),共同構(gòu)成了整個完整的表/索引。分區(qū)對應(yīng)用透明,即對訪問數(shù)據(jù)庫的應(yīng)用而言,邏輯上講只有一個表或一個索引(相當(dāng)于應(yīng)用看到的仍然只是一個表或索引),但在物理上這個表或索引可能由數(shù)個物理分區(qū)組成。
(2)什么時候需要分區(qū)
Oracle官網(wǎng)的建議以下情形采用分區(qū)表:
1. 表數(shù)據(jù)量大于2GB時應(yīng)該考慮使用分區(qū);
2. 新數(shù)據(jù)加入至最新分區(qū)中的用于存儲歷史數(shù)據(jù)的表。
(3)分表和分區(qū)表的區(qū)別
為了分散存儲大表/索引的數(shù)據(jù),另外一種途徑是分表,分表是將一個大表按照一定的規(guī)則分解成多張具有獨立存儲空間的實體表,例如可以將客戶表customer拆分成兩個表,一個用于存儲個人客戶 customer_person,另一個存儲對公客戶 customer_company。分表完全獨立,在邏輯上是多張不同的表,而分區(qū)表在物理上是一張表。分區(qū)表對應(yīng)用透明易于管理維護,分表不易于管理維護。
(4)分區(qū)表的類型
-
范圍分區(qū)(Range Partitioning)
-
列表分區(qū)(List Partitioning)
-
哈希分區(qū)(Hash Partitioning)
-
組合分區(qū)(Composite Partitioning)
基本分區(qū)是指僅僅使用了一層分區(qū)(范圍分區(qū)、列表分區(qū)、哈希分區(qū))的分區(qū)表。
如果對分區(qū)表進行多層級的分區(qū),則稱為組合分區(qū)。
范圍分區(qū)表
(1)分區(qū)鍵
分區(qū)是將非常大的表或者索引分解成多個小的、可管理的部分。分區(qū)表是通過分區(qū)鍵來分解分區(qū)的。分區(qū)鍵決定了分區(qū)表中的每一行數(shù)據(jù)流向哪個分區(qū)。分區(qū)表中的每一行數(shù)據(jù)根據(jù)分區(qū)鍵,隱式地被分配到一個分區(qū)中。
(2)范圍分區(qū)
范圍分區(qū)按照分區(qū)鍵,根據(jù)數(shù)據(jù)行落在分區(qū)鍵中不同的范圍值來劃分分區(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視頻教程》