首页 > Linux操作系统 > Linux操作系统 > oracle9i哈希分区表
哈希分区可以指定具体的分区名,如果不指定,则系统自动给定分区名SYS_Pn。
限制:
1)分区列<=16
2)分区列不可以包含ROWID,UROWID
3)分区列可以是除去ROWID, LONG, or LOB之外的任何oracle自带的类型。
哈希分区适用情形:
哈希分区可以对不适用于range和list分区的数据进行分区。hash分区语法简单且容易实现,在没有特殊的数据组织要求的情况下比列表更好用,更易于后期的使用和维护。
hash分区在以下方面比range分区要适合:
对于给定的范围,数据量不能事先确定
各范围分区的容量可能相差很大,或很难通过人工进行平衡
采用范围分区可能导致数据不正常的集中
应用系统对并行 DML(parallel DML),分区剪除(partition pruning),及基于分区的关联
(partition-wise joins)等与性能有关的分区特性要求较高
分裂(splitting),移除或者合并分区不适用hash分区。但hash分区可以添加和接合。
CREATE TABLE hash_products
( product_id NUMBER(6)
, product_name VARCHAR2(50)
, product_description VARCHAR2(2000)
, category_id NUMBER(2)
, weight_class NUMBER(1)
, warranty_period INTERVAL YEAR TO MONTH
, supplier_id NUMBER(6)
, product_status VARCHAR2(20)
, list_price NUMBER(8,2)
, min_price NUMBER(8,2)
, catalog_url VARCHAR2(50)
, CONSTRAINT product_status_lov
CHECK (product_status in ('orderable'
,'planned'
,'under development'
,'obsolete')
) )
PARTITION BY HASH (product_id)
PARTITIONS 5
STORE IN (tbs_1, tbs_2, tbs_3, tbs_4);
上面的语句创建了依据product_id为分区键进行hash分区的表hash_products。表空间名为tbs_1, tbs_2, tbs_3, tbs_4。
针对哈希分区的维护:
1)哈希分区如何添加分区
9i的文档里是这么说的
The add_hash_partition_clause lets you add a new hash partition to the "high" end of a partitioned table.
2)每当分区键值列加入新的数据,数据会怎样进行分布。
测试:
create table t1
partition by hash(empno)
partitions 4
tablespace test11
as select * from scott.emp;
select segment_name,partition_name from user_segments where segment_name='T1';
1 T1 SYS_P1
2 T1 SYS_P2
3 T1 SYS_P3
4 T1 SYS_P4
select * from t1 partition(sys_p1);
1 7369 SMITH CLERK 7902 12/17/1980 800.00 20
2 7499 ALLEN SALESMAN 7698 2/20/1981 1600.00 300.00 30
3 7698 BLAKE MANAGER 7839 5/1/1981 2850.00 30
4 7876 ADAMS CLERK 7788 5/23/1987 1100.00 20
select * from t1 partition(sys_p2);
1 7900 JAMES CLERK 7698 12/3/1981 950.00 30
2 7902 FORD ANALYST 7566 12/3/1981 3000.00 20
select * from t1 partition(sys_p3);
1 7654 MARTIN SALESMAN 7698 9/28/1981 1250.00 1400.00 30
2 7782 CLARK MANAGER 7839 6/9/1981 2450.00 10
3 7839 KING PRESIDENT 11/17/1981 5000.00 10
4 7934 MILLER CLERK 7782 1/23/1982 1300.00 10
select * from t1 partition(sys_p4);
1 7521 WARD SALESMAN 7698 2/22/1981 1250.00 500.00 30
2 7566 JONES MANAGER 7839 4/2/1981 2975.00 20
3 7788 SCOTT ANALYST 7566 4/19/1987 3000.00 20
4 7844 TURNER SALESMAN 7698 9/8/1981 1500.00 0.00 30
| P1 | P2 | P3 | P4 |
| 7369 | 7900 | 7654 | 7521 |
| 7499 | 7902 | 7782 | 7566 |
| 7698 | 7839 | 7788 | |
| 7876 | 7934 | 7844 |
INSERT INTO T1 VALUES(8000,'SMITH',' CLERK', 7902 ,SYSDATE, 800.00,'' , 20)
INSERT INTO T1 VALUES(8900,'SMITH',' CLERK', 7902 ,SYSDATE, 800.00,'' , 20)
INSERT INTO T1 VALUES(9000,'SMITH',' CLERK', 7902 ,SYSDATE, 800.00,'' , 20)
INSERT INTO T1 VALUES(9800,'SMITH',' CLERK', 7902 ,SYSDATE, 800.00,'' , 20)
INSERT INTO T1 VALUES(9800,'SMITH',' CLERK', 7902 ,SYSDATE, 800.00,'' , 20)
COMMIT;
select * from t1 partition(sys_p4);
1 7521 WARD SALESMAN 7698 2/22/1981 1250.00 500.00 30
2 7566 JONES MANAGER 7839 4/2/1981 2975.00 20
3 7788 SCOTT ANALYST 7566 4/19/1987 3000.00 20
4 7844 TURNER SALESMAN 7698 9/8/1981 1500.00 0.00 30
5 8000 SMITH CLERK 7902 9/1/2010 4:49:38 PM 800.00 20
select * from t1 partition(sys_p3);
1 7654 MARTIN SALESMAN 7698 9/28/1981 1250.00 1400.00 30
2 7782 CLARK MANAGER 7839 6/9/1981 2450.00 10
3 7839 KING PRESIDENT 11/17/1981 5000.00 10
4 7934 MILLER CLERK 7782 1/23/1982 1300.00 10
5 9800 SMITH CLERK 7902 9/1/2010 4:51:49 PM 800.00 20
6 9800 SMITH CLERK 7902 9/1/2010 4:51:49 PM 800.00 20
select * from t1 partition(sys_p2);
1 7900 JAMES CLERK 7698 12/3/1981 950.00 30
2 7902 FORD ANALYST 7566 12/3/1981 3000.00 20
3 9000 SMITH CLERK 7902 9/1/2010 4:51:25 PM 800.00 20
4 9000 SMITH CLERK 7902 9/1/2010 4:51:26 PM 800.00 20
5 8900 SMITH CLERK 7902 9/1/2010 4:51:39 PM 800.00 20
select * from t1 partition(sys_p1);
1 7369 SMITH CLERK 7902 12/17/1980 800.00 20
2 7499 ALLEN SALESMAN 7698 2/20/1981 1600.00 300.00 30
3 7698 BLAKE MANAGER 7839 5/1/1981 2850.00 30
4 7876 ADAMS CLERK 7788 5/23/1987 1100.00 20
5 8100 SMITH CLERK 7902 9/1/2010 4:51:34 PM 800.00 20
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7353848/viewspace-672367/ ,如需转载,请注明出处,否则将追究法律责任。