oracle创建簇表,表簇简介(table cluster)

表簇(table cluster)

一、什么是表簇?

表簇就是一组具备公共列的表。通常,一个数据块只能存储一个表的记录,在表簇中,一个数据库块可以存储多个表的记录。表簇中表的公共列叫做簇键(cluster key),簇键的值叫做簇键值。由于簇键是多个表的公共列,所以一个簇键值只存储一次,不论簇键值在各表中出现多少次。

存储结构:

二、表簇优点

(1)对于被聚簇表的联接,如上图所示,他们在存储时就已经‘预联结了’,这样可以减少磁盘 I/O。

(2)对于被聚簇表的联接,可以提高访问速度。

(3)只需更少的空间来存储相关的表和索引数据,因为簇键值不会为每行重复存储。

三、不适合用表簇的情况

(1)会经常被更新的表。

(2)经常需要全表扫描的

(3)需要被截断的表。簇可以截断,但是簇中的表不能截断,因为截断意味着要把表所在块设为可覆盖,这肯定是不行的。

四、表簇相关操作

(1). 建立用户,授权

SYS> create tablespace cluster1  datafile '/u01/oradata2/hx/cluster.dbf' size 50M;

SYS> create user cluster1 identified by cluster1 default tablespace cluster1 quota unlimited on cluster1;

SYS> grant connect,resource,create any cluster,alter any cluster to cluster1;

SYS> conn cluster1/cluster1

2.建立表簇

CREATE CLUSTER emp_dept (deptno NUMBER(3))

SIZE 1024

TABLESPACE cluster1

STORAGE (INITIAL 200K

NEXT 300K

MINEXTENTS 2

PCTINCREASE 33);

SIZE说明:SIZE表示我们希望为每个簇键值关联的字节数,假设块大小为8k,size设置为1024,那么一个块最多可以是7个簇键(当然还要考虑pcfree),插入第八个簇键时需要用新的块。如果这个值过大,单个数据块能存储的簇键变少,如果size值过小,可能还不够存放一条记录,这个时候数据溢出部分需要存储在串联的新块上,所以需要根据实际情况进行设置。需要注意,数据大小个数据插入顺序都会影响块上簇键的个数和数据表之间的聚合度。

3.在表簇上建立表

建立簇表时,一般不用指定表空间和pcfree等信息,因为这些信息在建簇时就已经指定,只需要映射属性到簇键即可

CREATE TABLE dept (

deptno NUMBER(3) PRIMARY KEY,

dname VARCHAR2(15) NOT NULL,

LOC VARCHAR2(15))

CLUSTER emp_dept (deptno);

CREATE TABLE emp (

empno NUMBER(5) PRIMARY KEY,

ename VARCHAR2(15) NOT NULL,

deptno NUMBER(3) REFERENCES dept)

CLUSTER emp_dept (deptno);

cluster1@HX> insert into dept values(100,'sales','boston');

insert into dept values(100,'sales','boston')

*

ERROR at line 1:

ORA-02032: 聚簇表无法在簇索引建立之前使用

4.使用前需要为簇建立索引:

CREATE INDEX emp_dept_index

ON CLUSTER emp_dept

TABLESPACE cluster1

STORAGE (INITIAL 50K

NEXT 50K

MINEXTENTS 2

MAXEXTENTS 10

PCTINCREASE 33);

cluster1@HX> SELECT segment_name,SEGMENT_TYPE,SEGMENT_SUBTYPE FROM user_segments;

SEGMENT_NAME             |SEGMENT_TYPE      |SEGMENT_SU

-------------------------|------------------|----------

EMP_DEPT                 |CLUSTER           |ASSM

SYS_C0037116             |INDEX             |ASSM

SYS_C0037118             |INDEX             |ASSM

EMP_DEPT_INDEX           |INDEX             |ASSM

簇索引的作用:插入数据时,数据库在物理上把每个部门的所有行存储在相同的数据块中,数据库以堆形式存储行,并使用索引定位。普通B树索引把键值和rowid关联,而B树簇索引把簇键值与数据所在块的数据库块地址 (DBA) 关

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值