• 售前

  • 售后

热门帖子
入门百科

Oracle 簇的使用详解

[复制链接]
王俊杰2017 显示全部楼层 发表于 2021-10-26 13:36:34 |阅读模式 打印 上一主题 下一主题
簇实在就是一组表,由一组共享雷同数据块的多个表组成,将经常一起使用的表组合在一起成簇可以进步处理服从;在一个簇中的表就叫做簇表。
创建顺序是:簇→簇表→簇索引→数据
创建簇的格式
CREATE CLUSTER cluster_name
(column date_type [,column datatype]...)
[PCTUSED 40 | integer] [PCTFREE 10 | integer]
[SIZE integer]
[INITRANS 1 | integer] [MAXTRANS 255 | integer]
[TABLESPACE tablespace]
[STORAGE storage]
SIZE:指定估计均匀簇键,以及与其相关的行所需的字节数。
1、创建簇
复制代码 代码如下:
    create cluster my_clu (deptno number )  
    pctused 60  
    pctfree 10  
    size 1024  
    tablespace users  
    storage (  
    initial 128 k  
    next 128 k  
    minextents 2  
    maxextents 20  
    );  

2、创建簇表
复制代码 代码如下:
    create table t1_dept(  
    deptno number ,  
    dname varchar2 ( 20 )  
    )  
    cluster my_clu(deptno);  
    create table t1_emp(  
    empno number ,  
    ename varchar2 ( 20 ),  
    birth_date date ,  
    deptno number  
    )  
    cluster my_clu(deptno);  

3、为簇创建索引
复制代码 代码如下:
create index clu_index on cluster my_clu;

注:若不创建簇索引,则在插入数据时报错:ORA-02032: clustered tables cannot be used before the cluster index is built
管理簇
使用ALTER修改簇属性(必须拥有ALTER ANY CLUSTER的权限)
1、修改簇属性
可以修改的簇属性包罗:
* PCTFREE、PCTUSED、INITRANS、MAXTRANS、STORAGE
* 为了存储簇键值全部行所需空间的均匀值SIZE
* 默认并行度
注:
* 不能修改INITIAL和MINEXTENTS的值
* PCTFREE、PCTUSED、SIZE参数修改后实用于全部数据块
* INITRANS、MAXTRANS仅实用于以后分配的数据块
* STORAGE参数修改后仅影响以后分配给簇的盘区
例:
复制代码 代码如下:
    alter cluster my_clu  
    pctused 40  

2、删除簇
复制代码 代码如下:
    drop cluster my_clu; -- 仅实用于删除空簇  
    drop cluster my_clu including tables ; -- 删除簇和簇表  
    drop cluster my_clu including tables cascade constraints ;--同时删除外键束缚  

注:簇表可以像平凡表一样删除。
3、清空簇
复制代码 代码如下:
truncate cluster my_clu;

注:全部在此簇上的表的数据全部被清空
散列聚簇表
在簇表中,Oracle使用存储在索引中的键值来定位表中的行,而在散列聚簇表中,使用了散列函数取代了簇索引,先通过内部函数或者自定义的函数举行散列盘算,然后再将盘算得到的码值用于定位表中的行。创建散列簇必要用到HASHKEYS子句。
1、创建散列簇
复制代码 代码如下:
    create cluster my_clu_two(empno number(10) )  
    pctused 70  
    pctfree 10  
    tablespace users  
    hash is empno  
    hashkeys 150 ;  

阐明:
* hash is 子句指明确举行散列的列,如果列是唯一的标示行,就可以将列指定为散列值
* hashkeys 指定和限定散列函数可以产生的唯一的散列值的数目
2、创建散列表
复制代码 代码如下:
    create table t2_emp (  
    empno number ( 10 ),  
    ename varchar2 ( 20 ),  
    birth_date date ,  
    deptno number )  
    cluster my_clu_two(empno);  

注意:
* 必须设置数值的精度
* 散列簇不能也不用创建索引
* 散列簇不能ALTER:size、hashkeys、hash is参数
不宜用聚簇表的情况
1)如果预料到聚簇中的表会大量修改,聚簇表会对DML的性能产生负面影响
2)非常不得当对单表的全表扫描,由于只能引起对其它表的全表扫描
3)频繁对表举行TRUNCATE和加载,由于聚簇中的表是不能TRUNCATE的,只能TRUNCATE簇
4)如果表只是偶然被连接或者它们的公共列经常被修改,则不要聚簇表
5)如果经常从全部有雷同聚簇键值的表查询出的效果数据凌驾一个或两个Oracle块,则不要聚簇表
6)如果空间不够,并且不能为将要插入的新记载分配额外的空间,那么不要使用聚簇

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作