表分區具有以下優點:
1.數據查詢:數據存儲在多個文件中,減少了I/O負載,提高了查詢速度。
2.數據剪枝:保存歷史數據比較理想。
3.備份:將壹個大表的數據分成多個文件,方便備份和恢復。
4.並行性:DML操作可以同時在表中執行,提高了並行性的性能,平衡了I/O,不同的分區可以映射到磁盤,平衡I/O,提高整個系統的性能。
5.增強可用性:如果表的壹個分區出現故障,表在其他分區的數據仍然可用;
6.維護方便:如果表的壹個分區出現故障,需要修復數據,修復分區即可;
7.提高查詢性能:分區對象的查詢只能搜索妳關心的分區,從而提高檢索速度。
8.應該註意,包含long和LONG數據類型的表不能分區。如果表大於2G,就要考慮分區。
二、分區表的類型
1,範圍範圍分區
描述:記錄字段的值在某個範圍內。
規則:
(1),每個分區必須有壹個小於的值子句,該子句指定不包括在分區中的上限值。
任何分區鍵值等於或大於此上限的記錄都將被添加到下壹個更高的分區中。
(2)除了第壹個分區之外的所有分區都會有壹個隱含的下限,這個下限就是前壹個分區的上限。
(3)在最高分區中,定義了MAXVALUE。MAXVALUE表示壹個不確定的值。該值高於其他分區中任何分區鍵的值,
它也可以理解為比任何分區中指定的值小的值,包括空值。如果不添加maxvalue,當分區插入值超過設置的最大限制時,會出現錯誤。
例1:根據日期範圍創建分區表。
創建表PART_TAB_CUSTOMER_BY_RANGE
(
CUSTOMER_ID號不是空主鍵,
FIRST_NAME VARCHAR2(30)不為空,
LAST_NAME VARCHAR2(30)不為空,
電話號碼VARCHAR2(15)不為空,
電子郵件VARCHAR2(80),
SEX VARCHAR2(10),
狀態VARCHAR2(10),
插入日期日期
)
按範圍分區(insert _ date)-按時間分區。
(
分區DATE_RANGE1值小於(TO _ DATE(' 2001-01-01 ',' YYYY-MM-DD ')(表空間part_Data1,
分區DATE_RANGE2值小於(TO _ DATE(' 2007-01-01 ',' YYYY-MM-DD '))表空間part_Data2,
分區日期範圍3值小於(最大值)表空間部分數據3
)
例2,按照$ number的範圍劃分
按範圍分區(customer _ id)-按id分區。
(
分區CUS _零件1值小於(100000)表空間零件_數據1,
分區CUS _零件2值小於(200000)表空間零件_數據2,
分區CUS _零件2值小於(最大值)表空間零件_數據3
)
2.列表列表分區
註意:這種分區的特點是壹個列的值只有有限的幾個值。基於這個特性,我們可以使用列表分區。
規則:默認分區是DEFAULT。如果未添加Default的分區的插入值不屬於集合分區,則會報告錯誤。
示例1:姓氏
創建表PART_TAB_CUSTOMER_BY_LIST
(
CUSTOMER_ID號不是空主鍵,
電話號碼VARCHAR2(15)不為空,
電子郵件VARCHAR2(80),
SEX VARCHAR2(10),
CORP_ID VARCHAR2(3),
插入日期日期,
SUM_DATE varchar2(4)
)
按列表劃分(性別)
(
分區男性值(' MALE ')表空間part_Data1,
分區女性值(“女性”)表空間part_Data2
)
例2,varchar2的日期
按列表分區(SUM_DATE)
(
分區SUM_DATE1值(' 2012 ')表空間part_Data1,
分區SUM_DATE2值(' 2013 ')表空間part_Data2,
分區SUM_DATE2值(默認值)表空間part_Data2
)
3.哈希哈希分區
描述:這種分區對列值使用哈希算法來確定將行放入哪個分區。
規則:當壹列的值沒有合適的條件,沒有值域規律,沒有固定值時,建議使用哈希分區。
散列分區是壹種通過指定分區號來均勻分布數據的分區類型,因為通過對I/O設備上的分區進行散列,
以便這些分區大小壹致。建議分區數量為2的n次方,這樣可以使分區之間的數據分布更加均勻。
創建散列分區有兩種方法:壹種是指定分區的名稱,另壹種是指定分區的數量。
例1,指定分區名的常規方法
創建表PART_TAB_CUSTOMER_BY_HASH
(
CUSTOMER_ID號不是空主鍵,
FIRST_NAME VARCHAR2(30)不為空,
LAST_NAME VARCHAR2(30)不為空,
電話號碼VARCHAR2(15)不為空,
電子郵件VARCHAR2(80),
SEX VARCHAR2(10),
狀態VARCHAR2(10),
插入日期日期
)
按散列分區(customer _ id)-按id散列。
(
分區hash1表空間part_Data1,
分區hash2表空間part_Data2
)
示例2:指定分區的數量
通過散列分區(empno)存儲在(part_Data1,part_Data2)中分區2;
-通常我們不需要知道bash分區的名稱,因為數據所在的分區是Oracle根據bash算法存儲的,而不是用戶指定的。
所以當用戶插入壹條記錄時,他們不確定應該把它放在哪個分區,這與range和list不同。
3.復合隔板
描述:顧名思義,復合分區是由range+list+hash組成的,壹般分為range+list、list+range、range+hash和list+bash。這裏列舉幾種常用的組合。
規則:如果組合中有哈希,則哈希分區被視為子分區,通過哈希分區的性質可以知道原因。
例1:範圍+列表。這種劃分基於範圍劃分和列表劃分。該表首先按列分區,然後按列分區。
創建表PART_TAB_SALE_RANGE_LIST
(
PRODUCT_ID VARCHAR2(5),
銷售日期日期,
銷售_成本編號(10)、
狀態VARCHAR2(10),
)
按範圍劃分(銷售日期)
按列表劃分的子分區(狀態)
(
分區P1值小於(TO _ DATE(' 2003-01-01 ',' YYYY-MM-DD '))表空間part_Data1
(
子分區P1SUB1值(' ACTIVE ')表空間part_Data1,
子分區P1SUB2值(“非活動”)表空間part_Data2,
子分區P1SUB3值(默認值)表空間part_Data3
),
分區P2值小於(TO_DATE('2003-03-01 ',' YYYY-MM-DD '))表空間part_Data2
(
子分區P2SUB1值(' ACTIVE ')表空間part_Data1,
子分區P2SUB2值(“非活動”)表空間part_Data2,
子分區P2SUB3值(默認值)表空間part_Data3
),
分區P3值小於(maxvalue)表空間part_Data3
(
子分區P3SUB1值(' ACTIVE ')表空間part_Data1,
子分區P3SUB2值(“非活動”)表空間part_Data2,
子分區P3SUB3值(默認值)表空間part_Data3
)
)
例2: range+bash。這種劃分基於範圍劃分和散列劃分。該表首先按列進行分區,然後按列進行散列。
按範圍劃分(交易日期)
按散列子分區(事務id)子分區3存儲在(dinya_space01,dinya_space02,dinya_space03)中
(partition part_01值小於(to _ date(' 2006-01-01 ',' yyyy-mm-dd ')),
partition part_02值小於(to _ date(' 2010-01-01 ',' yyyy-mm-dd '),
part_03分區值小於(maxvalue)
);
三、分區表的操作
1.DML操作
描述:DML操作與普通表相同,不同的是在執行DML操作之前可以指定表的特定分區。
比如查詢分區表。
SELECT * FROM PART _ TAB _ SALE _ RANGE _ LIST;-不指定分區的直接查詢。
SELECT * FROM PART _ TAB _ SALE _ RANGE _ LIST PARTITION(P2);-指定分區查詢
SELECT * FROM PART _ TAB _ SALE _ RANGE _ LIST子分區(p 1 sub 2);-指定小分區查詢
對於已分區表,指定壹個分區來執行DML會更高效,但如果指定了分區,而條件中的數據不在分區中,則不會生成DML操作。
2.DDL操作
1)添加分區
(1)將分區添加到範圍分區表。
ALTER TABLE PART _ TAB _ SALE _ RANGE _ LIST添加分區P3值小於(TO_DATE('2009-06-01 ',' YYYY-MM-DD ');
註意:添加分區時,添加分區的條件必須大於現有分區的最大值,否則系統會提示錯誤ORA-14074分區綁定必須比最後壹個分區的排序高。
(2)將分區添加到範圍分區表的列表子分區。
ALTER TABLE PART _ TAB _ SALE _ RANGE _ LIST修改分區P3添加子分區P3SUB1值(' COMPLETE ');
2)刪除分區
(1)從範圍分區表中刪除分區。
ALTER TABLE PART _ TAB _ SALE _ RANGE _ LIST刪除分區P3;
(2)刪除範圍分區表列表子分區的子分區
ALTER TABLE PART _ TAB _ SALE _ RANGE _ LIST DROP子分區p4sub 1;
註意:如果被刪除的分區是表中唯壹的分區,則不能將其刪除。要刪除該分區,必須刪除該表。
3)截斷分區
描述:截斷壹個分區意味著清空壹個分區中的數據,它不會刪除該分區,也不會刪除其他分區中的數據。當表中只有壹個分區時,它可以被截斷。
註意:如果截斷的分區表有約束,您需要首先關閉約束。alter table sales disable/enable constraint restriction _ name,截斷分區將使全局索引無效,需要重新生成。
(1)清除分區:
ALTER TABLE SALES截斷分區P2;-此方法使全局分區索引無效。
ALTER TABLE SALES TRUNCATE PARTITION P2更新索引;-這種方式使全局分區索引有效。更新全局索引。
(2)清空子分區:
ALTER TABLE PART _ TAB _ SALE _ RANGE _ LIST TRUNCATE子分區P2SUB2
ALTER TABLE PART _ TAB _ SALE _ RANGE _ LIST TRUNCATE子分區P2SUB2更新索引;
4)合並分區
註意:合並分區是將相鄰的分區合並成壹個分區。因此,分區將采用更高分區的邊界。值得註意的是,分區不能合並到更低邊界的分區中。
ALTER TABLE PART _ TAB _ SALE _ RANGE _ LIST將分區P1,P2合並到分區P2;
註意:在這個例子中,原始表的part_01分區和part_02分區被合並,合並後的分區是part_02。
如果合並時合並分區設置為part_01,系統會提示錯誤ORA-14275不能重用下界分區作為結果分區。
5)分割分區
描述:分割分區將壹個分區分割成兩個新的分區,分割後原分區不再存在。請註意,不能拆分哈希類型的分區。
將表PART_TAB_SALE_RANGE_LIST SBLIT分區P2 AT(TO_DATE('2003-03-01 ',' YYYY-MM-DD ')更改為(PARTITION P21,PARTITION P22);
6)接縫隔斷
描述:連接分區是將哈希分區中的數據連接到其他分區。當散列分區中的數據很大時,可以添加散列分區,然後將它們連接起來。
值得註意的是,連接分區只能在散列分區中使用。
ALTER TABLE PART _ TAB _ SALE _ RANGE _ LIST COALESCA PARTITION;
7)重命名表分區
將分區P21重命名為P2;
8)移動分區
描述:將分區移動到表空間,並在移動後重建索引。
alter table sales move partition sp 1表空間表空間名稱;
alter index index _ name rebuild
-查詢移動是否成功。Select table _ owner,table _ name,partition _ name,tablespace _ name,partition _ count from DBA _ tab _ partitions其中table _ owner = ' Scott
四、表分區相關數據字典表
-顯示表分區信息:顯示數據庫中所有已分區表的詳細分區信息:select * from DBA_TAB_PARTITIONS。
-顯示子分區信息:顯示數據庫中所有組合分區表的子分區信息:select * from DBA _ tab _ sub-partitions。
-顯示數據庫中所有已分區表的信息:select * from DBA_PART_TABLES。
-顯示數據庫可訪問的所有分區表的分區列信息:select * from DBA _ part _ key _ columns。
DBA _ IND _分區
DBA _ IND _子分區
-查詢索引信息
select對象名稱,對象類型,表空間名稱,sum(值)
來自v$segment_statistics
其中statistic_name IN('物理讀取','物理寫入','邏輯讀取'),object_type='INDEX '
按對象名、對象類型、表空間名分組
由4 desc訂購
動詞 (verb的縮寫)局部索引和全局索引
表可以按範圍、散列和列表進行分區。表分區後,其上的索引與普通表上的索引不同。oracle將分區表的索引分為兩類,即本地索引和全局索引。
對於從Oracle分區表派生的本地索引和全局索引,請檢查Oracle索引。