簇表概述

簇表(cluster) 是一种可以选的存储数据方式。簇表由1组拥有相同的列而且经常被一起使用的数据表构成,这组表在存储时会共享一部分Data Blocks, 例如,employeesdepartments表都包含department_id 这个列。 当用户将这两个表组合成1个簇表时,Oracle在物理上将employeesdepartments 两张表各行的department_id 字段存储在1个Data block里。

下图显示了由employeesdepartments 两张表构成的簇表是怎样存储的。

如上图,在1个簇表内,不同表的相关(related)数据行会被存储到1个Data Block中,因此有如下优点:
   
    * 连接(join) 簇表所需的磁盘I/O减少。

* 连接簇表时间减少

* 在1个簇表内,簇键(cluster key) 是指各簇键列(cluster key column)的值。1个簇内的
       有多个簇表的各个数据行所使用的相同的簇键值,在簇表及簇索引(cluster index)中只会被
       存储1次(参考上图)。因此与非簇表相比(nonclustered table)相比,簇表这存储相关的
       表和表数据所需的空间会减少。  如上图所示, 每个簇键(department_id)的值只会存储1次
       ,而两张表employeesdepartments 中包含的相同簇键值的数据共享同1个簇键.

簇表的一些属性
簇键 cluster key
      簇键是列或多列的组合,为簇表所共有
      在创建簇表时指定簇键的列,以后在创建增加簇表中的每个表示,指定相同的列则可。
      每个簇键值在簇和簇索引中只存储1次,与不同表中有多少这样的行无关。

使用簇键的好处
      减少磁盘I/O, 减少了因使用连接表所带来系统开销
      节省了磁盘存储空间,因为原来要单独存放多张表,现在可以将连接的部分作为共享列存储。

什么情况下创建簇表
      对于经常查询,DML操作比较少的表
         表中的记录经常被连接到其他表查询

创建簇表的步骤
    
创建簇表
      创建簇索引
      创建簇表的子表

创建簇表时应考虑的问题
    
哪些表适用于创建簇表
      对于创建簇的表那些列用作簇列
      创建簇时Data Blocks的空间如何使用(pctfree, pctused)
      平均簇键及所需相关行所需的空间大小
      簇索引的位置(比如存放到不同表空间)
      预估簇的大小

创建簇和簇表
在创建簇表时,如果未指定索引列,则默认的创建1个索引簇。
如果指定了散列参数, 如haskeys,hashis 或single table hashkeys,则可以创建哈希簇.

先检查当前环境


可以看出当前用户是HR, 用户的默认表空间是TS_EXAMPLE

创建簇

   CREATE CLUSTER EMP_DEPT_CLUSTER(DEPTNO NUMBER(2))
   PCTUSED 80
   PCTFREE 15
   SIZE 1024
   TABLESPACE USERS

上面语句就创建了1个簇,其中1个最重要的参数就是SIZE,需要为SIZE指定1个合适的值,如果太大,则每个块仅存放少量的簇,造成空间浪费,太小又会形成很多数据链。
注意TABLESPACE 字句,这里我们会将这个簇放入USER 这个表空间中,而不是用户HR默认的表空间TS_EXAMPLE.

注意:本地管理类型的表空间中, PCTUSED的设置是无效的.
关于PCTUSED PCTFREE 的参数可以参考我的另1篇blog
http://nvd11.blog.163.com/blog/static/200018312201282354948602/
如下图,利用上面语句创建了1个簇

创建后可以通过查看user_clusters 来检索这个簇.

创建簇索引
    创建簇索引的条件:
      * 模式中必须包含簇
      * 必须具有create any index 的权限.

簇索引的作用
         用于1个簇键值并返回该簇键值的地址块. (注意簇中,每1个簇键值只存储1次啊)
   
   语法:
           Create index emp_dept_cluster_idx
                         on  cluster emp_dept_cluster

创建后可以查看user_indexse来检索这个簇索引

创建簇表
     创建簇表 cl_dept:
      CREATE TABLE CL_DEPT(
                       DEPTNO NUMBER(2) PRIMARY KEY,
                       DNAME VARCHAR2(14),
                       LOC VARCHAR2(13)
                       )
                cluster emp_dept_cluster(deptno)
--cluster关键字后面跟簇名、簇列
                                                                               --作用就是分配该表给指定簇,同时指定簇键.

     CREATE TABLE CL_EMP(
                      EMPNO NUMBER PRIMARY KEY,
                      ENAME VARCHAR2(10),
                      JOB1  VARCHAR(9),
                      MGR   NUMBER,
                      HIREDATE DATE,
                      SAL   NUMBER,
                      COMM  NUMBER,
                      DEPTNO NUMBER(2) REFERENCES CL_DEPT(DEPTNO)  --
外键
                      )
                CLUSTER EMP_DEPT_CLUSTER(DEPTNO) ----
cluster关键字后面跟簇名、簇列

创建后可以查看user_tables来检索这两张簇表

也可以从user_objects视图里查看:

上图两个SYS开头的index是建立主键时系统自动建立的indexes.

下面对CL_DEPT 和 CL_EMP 插入数据. 从scott帐号的表导入

记得commit;..

更改簇属性
     

   类似table
 可以用如下语句更改簇属性
Alter Cluster EMP_DEPT_CLUSTER
        pctree 20;

Oracle簇表介绍 (clustered table)相关推荐

  1. SAP簇表(cluster table)BSEG使用方法

    1.BSEG可以拆分成6张表 BSAS+BSIS+BSAK+BSIK+BSAD+BSID = BSEG  2.6张表说明 cleared(已清帐) opened(未清帐)   BSAS BSIS GL ...

  2. Oracle创建表语句(Create table)语法详解及示例

    Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...

  3. 建oracle簇表,详解ORACLE簇表、堆表、IOT表、分区表

    详解ORACLE簇表.堆表.IOT表.分区表 簇和簇表 簇其实就是一组表,是一组共享相同数据块的多个表组成.将经常一起使用的表组合在一起成簇可以提高处理效率. 在一个簇中的表就叫做簇表.建立顺序是:簇 ...

  4. oracle clustered索引,数据库表--index clustered table

    cluster指一个或多个表组成的组,这些表物理的存储在相同的数据块上,有相同聚簇键值的所有行相邻的物理存储.第一,多个表物理的存储在一起,多个表数据存储到同一个数据块上:第二,包含相同聚簇键值的所有 ...

  5. mysql库表散列_数据库表--hash clustered table

    Hash clustered table与索引聚簇表非常相似,只有一个主要区别:聚簇键索引被一个hash函数所取代,表中的数据就是索引.所以没有物理索引 hash clustered table也有副 ...

  6. oracle簇表 数据抽取,Oracle聚簇表

    tacustomer有200万左右的记录数,记录长度上限(各个字段最大长度之和,如VARCHAR2(100)视作最长100个字节)约800个字节.taaccoinfo表约200万,记录长度上限为788 ...

  7. Oracle删除表数据TRUNCATE TABLE 命令

    本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作.TRUNCATE TABLE 与没有 WHERE 子句的 ...

  8. oracle 创建表 as,Oracle创建表(create table as)

    CREATE TABLE AS语句用于通过复制现有表的列从现有表来创建新表. 注意:如果以这种方式创建表,则新表将包含现有表中的记录. 语法: CREATE TABLE new_table AS (S ...

  9. 聚集表(clustered table)data page中的数据行可以无序

    误区 一直以为只要一个表含有聚集索引,那么在data page中的数据行是排序的.比如原来data page中有1.2.4.5.6这样四条记录,那么我要插入3这条记录,应该是先将456三条记录往后移, ...

最新文章

  1. Spring 的IOC容器系列的设计与实现:BeanFactory 和 ApplicationContext
  2. 理解进程调度时机跟踪分析进程调度与进程切换的过程
  3. AssetBundle Workflow
  4. java 数组拼接_打印Java数组最优雅的方式是什么?这波操作闪瞎我
  5. python提取英文单词 每行显示一个_使用python对文件中的单词进行提取
  6. Java中static变量作用和用法详解
  7. Docker学习总结(43)——Docker Compose 搭建Mysql主从复制集群
  8. 在线CSV转TSV工具
  9. 18.TCP使用的注意事项
  10. 创建系统镜像_学会这些, 操作docker image镜像就够了!
  11. Web前端-HTTP Cache-control
  12. matlab运行没有图片,simulink模型运行时没报错,但scope没有图像,什么原因?
  13. 空间说说html,适合发空间说说的经典心情短语
  14. 手机全屏html幻灯片,Jquery+css3,实现全屏撕裂幻灯片案例教程(zepto版本的 jquery.slitslider.js)【手机版】...
  15. python链家数据分析统计服_Python数据分析实战-链家北京二手房价分析
  16. Dialog加载页面动画(Loding.....加载等待)三种方式
  17. 小程序用户行为数据监测与分析以及案例分享
  18. 静态路由和动态路由的融会贯通(思科/华为)
  19. C语言求ax2+bx+c=0的解,解一元二次方程
  20. 一名奔三的程序猿的困惑

热门文章

  1. 12- Library at ROM
  2. [optee]-optee的加解密接口的介绍
  3. 数据结构栈队列链表数组
  4. 推荐一款好工具:16进制字节搜索工具 C#的效率
  5. mingw编译wxwidgets
  6. 使用递归的方式实现简易的二分法
  7. [WUSTCTF2020]level4
  8. 什么是事务?为什么需要事务?
  9. python设置ini文件中的值_PyCharm设置python文件模板,自动读取文件信息。
  10. 关闭裁剪功能_4个图片裁剪技巧,瞬间看出Word大神与小白的差距!