Oracle 簇的使用详解

 更新时间:2013年05月31日 09:54:02   作者:  
本篇文章是对Oracle中簇的使用进行了详细的分析介绍,需要的朋友参考下
簇其实就是一组表,由一组共享相同数据块的多个表组成,将经常一起使用的表组合在一起成簇可以提高处理效率;在一个簇中的表就叫做簇表。
建立顺序是:簇→簇表→簇索引→数据
创建簇的格式
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)如果空间不够,并且不能为将要插入的新记录分配额外的空间,那么不要使用聚簇

相关文章

  • 获取Oracle表大小的三种方法

    获取Oracle表大小的三种方法

    在 Oracle 数据库中,获取表的大小可以通过查询数据字典视图 DBA_SEGMENTS、USER_SEGMENTS 或 ALL_SEGMENTS,具体取决于你的权限范围和需求,本文通过代码示例介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • oracle 视图权限 oracle 创建视图权限不足

    oracle 视图权限 oracle 创建视图权限不足

    在scott用户下创建视图的时候,报错:权限不足,遇到这个问题,我也是束手无策,于是网上搜集整理了一下,晒出来和大家分享,希望可以帮助你们
    2012-11-11
  • oracle如何解锁封锁的账号

    oracle如何解锁封锁的账号

    今天小编就为大家分享一篇关于oracle如何解锁封锁的账号,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • oracle使用索引与不使用索引的性能详析

    oracle使用索引与不使用索引的性能详析

    索引是建立在表的一列或多个列上的辅助对象,目的是加快訪问表中的数据,下面这篇文章主要给大家分析介绍了关于oracle使用索引与不使用索引的性能的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-10-10
  • [Oracle] 浅谈Lock与Latch

    [Oracle] 浅谈Lock与Latch

    以下是对Oracle中Lock与Latch的相同点以及不同点进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • Oracle中的索引讲解

    Oracle中的索引讲解

    这篇文章介绍了Oracle中的索引,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Oracle/SQL中TO_DATE函数详细实例解析

    Oracle/SQL中TO_DATE函数详细实例解析

    Oracle to_date()函数用于日期转换,下面这篇文章主要给大家介绍了关于Oracle/SQL中TO_DATE函数的相关资料,文中通过代码介绍的非常详细,对大家学习或者使用oracle具有一定的参考解决价值,需要的朋友可以参考下
    2024-06-06
  • oracle单库彻底删除干净的执行步骤

    oracle单库彻底删除干净的执行步骤

    oracle单库彻底删除干净:关闭数据库、关监听、清除残余文件、删除用户和组,详细操作如下,感兴趣的朋友可以参考下哈
    2013-05-05
  • Oracle数据库在指定字段后新增字段代码举例

    Oracle数据库在指定字段后新增字段代码举例

    很多时候数据库中已有表的字段与需求业务所需字段有差异,需要增加一个或多个字段,这篇文章主要给大家介绍了关于Oracle数据库在指定字段后新增字段的相关资料,需要的朋友可以参考下
    2023-09-09
  • oracle 数据库启动阶段分析

    oracle 数据库启动阶段分析

    这篇文章主要介绍了oracle 数据库启动阶段分析,包括三个阶段的详细介绍,需要的朋友可以了解下。
    2017-09-09

最新评论