簇表及簇表管理(Index clustered t…

 

    簇表是Oracle中一种可选、的存储表数据的方法。使用簇表可以减少磁盘I/O,改善访问簇表的联结所带来的资源开销,本文讲述了簇表的原理、创建以及管理簇表等。

 

一、什么是簇表及簇表的特性

    1.簇表

         由共享相同数据块的一组表组成。在堆表的管理过程中,对于某些表的某些列和另外的表的某些列经常被用来联结使用,可以将这些表的联结列作为共享的公共列而将这些表组合在一起。这就是簇表形成的原因。例如,scott模式中,有emp表,dept表,两个表经常使用 deptno列来进行联结,为此,我们共享deptno列,将empdept表组成簇表。组成簇表后,Oracle物理上将empdept表中有关每个部门所有行存储到相同的数据块中。

         簇表不能等同于SQL server中的簇索引,两者并不是一回事。SQL server中的簇索引是使得行的存储按索引键来存储,类似于IOT表。

           

    2.簇键

        簇键是列或多列的组合,为簇表所共有

        在创建簇时指定簇键的列,以后在创建增加的簇中的每个表时,指定相同的列即可

        每个簇键值在簇和簇索引中仅仅存储一次,与不同表中有有多少这样的行无关

       

    3.使用簇表的好处。

        减少磁盘I/O,减少了因使用联结所带来的系统开销

        节省了磁盘存储空间,因为原来需要单独存放多张表,现在可以将联结的部分作为共享列的存储。

   

    4.何时创建簇表

        对于经常查询、当DML较少的表

        表中的记录经常使用到联结查询

       

    5.创建簇表的步骤

        创建簇

        创建簇索引

        创建簇表

       

       

    6.创建簇、簇键、簇表时考虑的问题

        哪些表适用于创建簇

        对于创建簇的表哪些列用作簇列

        创建簇时数据块空间如何使用(pctfree,pctused)

        平均簇键及相关行所需的空间大小

        簇索引的位置(比如存放到不同的表空间)

        预估簇的大小

       

二、创建簇及簇表

 

    在创建簇时,如果未指定索引列,则默认地创建一个索引簇。

    如果指定了散列参数,如hashkeys,hashissingle table hashkeys,则可以创建散列簇

        SQL> show user;

        USER is "ROBINSON"

        SQL> create cluster emp_dept_cluster(deptno number(2))

          2  pctused 80

          3  pctfree 15

          4  size 1024

          5  tablespace users;

 

        Cluster created.   

 

    在上面创建的簇中,一个最重要的参数就是size,需要为size 指定合适的大小,如果size 指定的太大,则每个块仅仅能存放

    少量的簇,容易引起空间的浪费,如果指定的太小,则容易产生过多的数据链

   

    创建簇索引的条件

        模式中必须包含簇

        必须具有create any index的权限

        簇索引的作用

            用于一个簇键值并返回的包含该簇键值的地址块

        SQL> create index emp_dept_cluster_idx

          2  on cluster emp_dept_cluster;

 

        Index created.

 

    创建簇表

        SQL> create table dept

          2  (deptno number(2) primary key,

          3   dname varchar2(14),

          4   loc   varchar2(13)

          5  )

          6   cluster emp_dept_cluster(deptno);   --使用了cluster关键字后面跟簇名、簇列

 

        Table created.

 

        SQL> create table emp

          2  (empno number primary key,

          3   ename varchar2(10),

          4   job varchar2(9),

          5   mgr number,

          6   hiredate date,

          7   sal number,

          8   comm number,

          9   deptno number(2) references dept(deptno)

         10  )

         11   cluster emp_dept_cluster(deptno);  --使用了cluster关键字后面跟簇名、簇列

 

        Table created.

 

    对于创建的簇表,与普通表的唯一差别是使用了cluster关键字,即告诉oracle 基表的哪一列将映射到簇表中

 

    查看刚刚创建的簇对象

        SQL> select object_name,object_type,status from user_objects order by object_name ;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值