實現水平分區以后,可以達到以下目的:
1. 增強可用性:如果表的某個分區出現故障,表在其他分區的數據仍然可用;
2. 維護方便:如果表的某個分區出現故障,需要修復數據,只修復該分區即可;
3. 均衡I/O:可以把不同的分區映射到磁盤以平衡I/O,改善整個系統性能;
4. 改善查詢性能:對分區對象的查詢可以僅搜索自己關心的分區,提高檢索速度。
DM數據庫提供對表的分區方法有兩種:
1、范圍分區:范圍分區就是對表中的某個值的范圍進行分區,根據某個值的范圍,決定將該數據存儲在哪個分區上。
2、HASH分區:HASH分區是通過指定分區編號來均勻分布數據的一種分區類型,因為通過在I/O設備上進行散列分區,使得這些分區大小一致。
除了對表進行分區,還可以對索引進行分區。DM支持下面三種類型的分區索引:
1、本地索引:其分區方式與其所在基礎表的分區方式一模一樣的索引。本地索引的每個分區僅對應于其所在基礎表的一個分區。
2、全局分區索引:使用不同于其所在表的分區鍵進行分區的索引,其所在表可以是分區表或非分區表。
3、全局非分區索引:全局非分區索引基本上和非分區表的索引一樣。索引結構是不分區的。
1.1 水平分區表的創建
在介紹水平分區表的創建之前。先要了解分區鍵的概念。
分區鍵:分區鍵是分區表的某一列,它決定了分區表中每一行數據劃分到哪個分區。該列的數據類型為DM常用數據類型,不支持BLOB、TEXT、ROWID、BIT、BINARY、VARBINARY、時間間隔等類型和用戶自定義類型。分區鍵不可以刪除或修改。
范圍分區通過LEFT或RIGHT關鍵字來指定每個值是第一個分區的上邊界 (LEFT) 還是第二個分區的下邊界 (RIGHT)。邊界值不要求是遞增的序列,但是不能重復,邊界值不可以為NULL,支持使用常量表達式或返回常量值的函數來指定分區的邊界值。
如:建立范圍分區表CREATE TABLE TAB1(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY RANGE (C1) LEFT FOR VALUES (1, 100, 10000);
PARTITION NO1234
VALUESVAL<=11
建立HASH分區表CREATE TABLE TAB2(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY HASH(C1) PARTITIONS 3; TAB2以C1為分區鍵,且分區數為3。
范圍區間或HASH分區數目不能超過64個。不同的分區可以指定到不同的文件組。。
1.2 分區索引的創建
本地索引、全局非分區索引、全局分區索引可以建立在范圍分區表或HASH分區表上,普通表上可以建立全局分區索引。
如:CREATE TABLE T(C1 INT, C2 INT, C3 VARCHAR(100)) PARTITION BY RANGE(C1) LEFT FOR VALUES(1, 100);
CREATE INDEX T_IND1 ON T (C2); -- 本地索引,系統將自動創建3個分區子索引,這些分區子索引按照C1進行分區。
CREATE NOT PARTIAL INDEX T_IND2 ON T (C2); -- 全局非分區索引,索引不分區。
CREATE INDEX T_IND3 ON T (C2) PARTITION BY RANGE(C2) LEFT FOR VALUES(5, 55); -- 全局分區索引,索引按照C2列分區
1.3 水平分區表和分區索引的維護
DM支持對范圍分區表和范圍分區表上的索引進行合并和拆分。HASH分區表和HASH分區表上的索引不支持合并和拆分,本地分區索引不允許合并和拆分。
分區合并通過指定分區號將相鄰的兩個分區合并成一個分區。MERGE分區時,相鄰的兩個分區可以是相同的文件組,也可以是不同的文件組。
分區拆分通過指定常量表達式值將某一個分區拆分成兩個分區,指定的常量表達式值不能是原有的分區范圍值。SPLIT分區時,可以指定新的文件組,或者不指定文件組。
1.4 水平分區的使用
水平分區表、分區索引的使用和普通表、普通索引的使用一樣。用戶通過SQL語句建立范圍分區和HASH分區表,以及水平分區索引以后,普通的INSERT、DELETE、UPDATE、SELECT語句的使用不受任何影響。
分區拆分或合并以后,普通的INSERT、DELETE、UPDATE、SELECT語句的使用不受任何影響。