ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle9i哈希分区表

oracle9i哈希分区表

原创 Linux操作系统 作者:monica_yaotf 时间:2010-09-01 16:29:14 0 删除 编辑

哈希分区可以指定具体的分区名,如果不指定,则系统自动给定分区名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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ora-01956
下一篇: 数据仓库介绍
请登录后发表评论 登录
全部评论

注册时间:2008-03-27

  • 博文量
    73
  • 访问量
    320844