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)如果空间不够,并且不能为将要插入的新记录分配额外的空间,那么不要使用聚簇

(0)

相关推荐

  • Oracle 簇的使用详解

    簇其实就是一组表,由一组共享相同数据块的多个表组成,将经常一起使用的表组合在一起成簇可以提高处理效率:在一个簇中的表就叫做簇表.建立顺序是:簇→簇表→簇索引→数据创建簇的格式CREATE CLUSTER cluster_name(column date_type [,column datatype]...)[PCTUSED 40 | integer] [PCTFREE 10 | integer][SIZE integer][INITRANS 1 | integer] [MAXTRANS 255

  • Oracle SCN与检查点详解

    1.SCN 的定义 SCN(System Change Number ),也就是通常所说的系统改变号,是数据库中非常重要的 一个数据结构. SCN 用以标识数据库在某个确切时刻提交的版本.在事务提交时,它被赋予一个惟一的 标识事务的SCN.SCN 同时被作为 Oracle数据库的内部时钟机制,可被看作逻辑时钟,每个 数据库都有一个全局的 SCN 生成器. 作为数据库内部的逻辑时钟,数据库事务依 SCN 而排序,Oracle 也依据 SCN 来实现一致性读 (Read Consistency )等

  • Oracle addBatch()用法实例详解

    Oracle addBatch()用法实例详解 PreparedStatement.addbatch()的使用 Statement和PreparedStatement的区别就不多废话了,直接说PreparedStatement最重要的addbatch()结构的使用. 1.建立链接     Connection connection =getConnection(); 2.不自动 Commit connection.setAutoCommit(false); 3.预编译SQL语句,只编译一回哦,效

  • Java导出oracle表结构实例详解

     Java导出oracle表结构实例详解 最近用到的,因为plsql是收费的,不让用,找了很多方法终于发现了这个. 核心语句 SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, U.object_name), U.OBJECT_TYPE FROM USER_OBJECTS U where U.OBJECT_TYPE = 'TABLE' or U.OBJECT_TYPE = 'VIEW' or U.OBJECT_TYPE = 'INDEX' or U.OBJEC

  • 使用zabbix监控oracle数据库的方法详解

    一.概述 zabbix是一款非常强大,同时也是应用最为广泛的开源监控软件,本文将给大家介绍如何利用zabbix+python监控oracle数据库. 二.环境介绍 以下是我安装的环境,实际部署时并不需要跟我的环境一样. 1. 监控机 Redhat Linux 6.5 + Zabbix server 3.4.10 + Python 2.6.6 (操作系统自带) + Oracle Client 11.2 (x86_64) 2. 被监控机 Oracle 11.2.0.4 三.选择监控方式 zabbix

  • Oracle之TO_DATE用法详解

    目录 TO_DATE格式(以时间:2007-11-02 13:45:25为例) 1. 日期和字符转换函数用法(to_date,to_char) 2. 字符串和时间互转 3.求某天是星期几 4. 两个日期间的天数 5. 时间为null的用法 6.月份差 7. 日期格式冲突问题 8.查询特殊条件天数 9. 查找月份 10. Next_day的用法 11.获得小时数 12.年月日的处理 13.处理月份天数不定的办法 14.找出今年的天数 15.yyyy与rrrr的区别 16.不同时区的处理 17. 5

  • oracle创建用户过程详解

    1.首先用管理员用户登陆sqlplus: sqlplus "sysman/安装时设置的密码" 2.创建用户 create user userName identified by password; 创建用户 userName,密码为 password 3.给用户授权 grant dba to userName; --授予DBA权限 grant unlimited tablespace to userName;--授予不限制的表空间 grant select any table to u

  • Oracle中NEXTVAL案例详解

    1.什么是sequence?其作用是什么?         在Oracle数据库中,什么是序列呢?其中的作用是什么呢?其实sequence是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).其主要的用途是生成表的主键值,可以在插入语句中引用,在插入之前,获取序列号nextval值,然后进行插入.也可以通过查询检查当前值,或使序列增至下一个值. 2.如何定义一个sequence? create sequence INR_REQUIRMENT_SQUENCE INCRE

  • Oracle数据库备份还原详解

    理论准备 oracle 数据库提供expdp和impdp命令用于备份和恢复数据库. 具体可查阅oracle官方文档 https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sutil/database-utilities.pdf 备份和还原主要有 FULL_MODE:整个数据库进行备份还原. Schema Mode:默认导出模式,Schema 模式. Table Mode:表模式. Tablespace Mode:表空间模式

  • PHP使用PDO访问oracle数据库的步骤详解

    前言 PDO 从一开始就吸取了现有数据库扩展成功和失败的经验教训.因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利用 PHP 5 的最新特性. PDO 旨在将常见的数据库功能作为基础提供,同时提供对于 RDBMS 独特功能的方便访问. 虽然LAMP中PHP和Mysql是标准配对,但是公司的项目是Mysql和Oracle分别作为运行库和详单库的,所以PHP连接oracle数据库也是必须要实现的.本篇文章就介绍下如果通过PDO连接到oracle数据库,下面话不多说了,来一起看看详细

随机推荐