数据库表--index clustered table

cluster指一个或多个表组成的组,这些表物理的存储在相同的数据块上,有相同聚簇键值的所有行相邻的物理存储。第一,多个表物理的存储在一起,多个表数据存储到同一个数据块上;第二,包含相同聚簇键值的所有数据会物理的存储在一起。聚簇键使用B*树索引建立


--先创建一个聚族
CREATE CLUSTER emp_dept_cluster(deptno number(6))SIZE 1024;

--在聚簇上建立索引
 CREATE INDEX emp_dept_cluster_index ON CLUSTER emp_dept_cluster;

--创建表
        CREATE TABLE dept1(
               deptno NUMBER(6) PRIMARY KEY,
               dname VARCHAR2(50)
               )CLUSTER emp_dept_cluster(deptno);
        CREATE TABLE emp1(
               empno NUMBER PRIMARY KEY,
               ename VARCHAR2(50),
               sal NUMBER(5,2),
               deptno NUMBER(6),
               FOREIGN KEY(deptno) REFERENCES dept1(deptno)
        )CLUSTER emp_dept_cluster(deptno);
  这样可以让两个表同时用上聚簇索引。一个表只能有一个聚簇索引,但是一个聚簇索引可以包含多个列,称为组合索引


什么时候适合是用索引聚簇表:
· 数据主要用于读(这并不表示“从来不写”;聚簇表完全可以修改),而且要通过索引来读(可以是聚簇键索引,也可以是聚簇表上的其他索引)
· 需要频繁地把逻辑上相关而且总是一起使用的表信息联结在一起

什么时候不适合使用聚簇表:
· 如果预料到聚簇中的表会大量修改。索引聚簇会对DML的性能产生某种负面影响。
· 如果需要对聚簇中的某个表执行全表扫描。全表扫描不只是读取了需要的某个表中的数据,还读取了其它的多个表中的数据,全表扫描耗时更久。
· 如果需要频繁地TRUNCATE和加载表。聚簇中的表不能截除,因为聚簇在一个块上存储了多个表,必须删除聚簇表中的行。
· 如果需要对表进行分区。聚簇中的表不能被分区。聚簇本身也不能被分区


利用聚簇表可以物理的预联接数据。使用聚簇可以把多个表上的相关数据存储在同一个数据块上。聚簇有助于完成总是把数据联接在一起或访问相关数据集的读密集型操作。聚簇表可以减少Oracle必须缓存的块数,提高缓冲区缓存的效率。不好的一面是,除非你能正确的计算出size参数设置,否则聚簇在空间利用方面可能效率低下,而且可能会使有大量DML的操作变慢。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29337971/viewspace-1062720/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29337971/viewspace-1062720/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值