下面我分別對這四種分區方法的概念,他們的使用情境,以及各種分區方法做一個效能比較。
一、概念
1、Range Partitioning
這是最常用的一種分區方法,基於COLUMN的值範圍做分區,最常見的是基於時間欄位的資料的範圍的分區,比如:對於SALE表,可以對銷售時間按照月份做一個Range Partitioning。這種分區在資料倉儲裡用的比較多,以下是
CREATE STATMENT
CREATE TABLE sales_range
(salesman_id NUMBER(5),
salesman_name VARCHAR2(30),
sales_amount NUMBER(10),
sales_date DATE)
COMPRESS
PARTITION BY RANGE(sales_date)
(PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')),
PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')),
PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY')),
PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY')));
對於COMPRESS關鍵字的理解,將在後續的壓縮分區講到
2、Hash Partitioning
Hash Partitioning映射資料到基於HASH演算法的分區上,HASH演算法將應用你指定的分區關鍵字,平均的分那些在Partitions中的行。給每一個分區近似相同的大小,要保證資料能平均分配,分區數一般是2N。比如說,需要insert sales_hash 一條資料,ORACLE會通過HASH演算法處理salesman_id,然後找到對於的分區表進行insert。Hash Partitioning 是為跨越裝置的分布式資料提供了一種理想的方法,HASH演算法也很容易轉化成RANGE分區方法,特別是當被分區的資料不是曆史資料時。
CREATE TABLE sales_hash
(salesman_id NUMBER(5),
salesman_name VARCHAR2(30),
sales_amount NUMBER(10),
week_no NUMBER(2))
PARTITION BY HASH(salesman_id)
PARTITIONS 4;