zoukankan      html  css  js  c++  java
  • 【数据库】oracle的簇与簇表

    转载:http://blog.csdn.net/luxiaopengpeng/article/details/48178441

    簇由一组共享多个数据块的多个表组成,它将这些表的相关行一起存储到相同数据块中,这样可以减少查询数据所需的磁盘读取量。创建簇后,用户可以在簇中创建表,这些表称为簇表。

    例如有如下两个表:student和achievement.。其中,student表存储学生信息,需要使用SID字段(存储学生ID);achievement表存储学生成绩信息,也需要使用SID字段。也就是说,student和achievement需要共享学生ID数据块。

    注意:如果用户在自己的模式中创建簇,则必须具有create cluster权限和unlimited tablespace系统权限;如果想在其他模式中创建簇,则还必须具有create any cluster系统权限

    创建簇和簇表

    1.创建簇

    创建簇,需要使用create cluster语句,例如创建一个名为stu_ach的簇,如下:
    create cluster stu_ach(sid number)  
    pctused 40
    pctfree 10 
    size 1024  
    storage  
    (initial 128k  
    next 128k  
    minextents 2  
    maxextents 20  
    )tablespace huizhi;  
    

    上面创建簇stu_ach时,指定通过SID字段来对簇中的表进行聚簇存储,这个SID字段就可以称之为聚簇字段。
    注意:size子句用来为聚簇字段提供指定的数据块数量。例如,将size设置为1024,即表明簇中的聚簇字段记录只能存储在1024个数据块中。1

    2.创建簇表

    创建簇表,需要使用cluster子句指定所使用的簇和簇字段。
    例如,在stu_ach簇中创建两个簇表:student和achievement。如下:
    create table student(  
    sid number,  
    sname varchar2(8),  
    sage number  
    )  
    cluster stu_ach(sid);  
    --表已创建  
    create table achievement(  
    aid number,  
    score number,  
    sid number  
    )  
    cluster stu_ach(sid);  
    --表已创建 
    上例在创建student和achievement表时,使用cluster子句指定它们所使用的簇为stu_ach,所使用的簇字段为SID。
    提示:将student和achievement两个表组成一个簇后,在物理上oracle会将这两个表中每个学生的学生信息和该学生的所有成绩信息存储到相同的数据块中。
    现在向student表中添加记录,如下:
    insert into student values(1,'小明',24);  
    发现还无法向簇表中添加记录。
    注意:为了能够向簇表中添加记录,还需要首先为簇建立索引。

    创建簇索引

    簇索引与簇表不同,它并不存在于簇中,而是与普通索引一样需要具有独立的存储空间。
    例如,为簇stu_ach建立一个簇索引,如下:
    create index stu_ach_index  
    on cluster stu_ach  
    tablespace huizhi; 
    上例为簇stu_ach建立了一个名为stu_ach_index的簇索引。创建簇索引后,就可以向簇表中添加记录了。

    管理簇

    对一个簇的管理主要是修改簇和删除簇。如果用户想要管理簇,则必须具有alter any cluster系统权限。

    修改簇

    修改一个簇,主要是修改簇的如下属性值:
    1.物理存储属性,包括pctfree、pctused、initrans、maxtrans和storage。
    2.为了存储簇键值的所有行所需空间的平均值size。
    3.默认的并行度。

    删除簇

    1.删除一个空簇:当一个簇中不包含簇表时,删除该簇可以使用drop cluster cluster_name语句。
    2.删除一个含有簇表的簇:需要使用drop cluster...including tables语句,如下
    drop cluster stu_ach including tables; 
    

      

    另外,如果某个簇含有簇表,并且有外键约束,则需要使用drop cluster...including tables cascade constraints语句删除该簇。如下:
    drop cluster stu_ach including tables; 
    

      



  • 相关阅读:
    Linux下安装mysql(yum和源码编译两种方式)
    搭建Hadoop集群(centos6.7+hadoop-2.7.3)
    xen虚拟机(Centos6.6)的创建和扩容
    Apache Ranger对HDFS的访问权限控制的原理分析(一)
    Block Token 原理分析
    Hadoop安全机制之令牌
    VS 2012 Unit Test
    java 并发
    图片相关
    cmd出现乱码
  • 原文地址:https://www.cnblogs.com/sxy-798013203/p/7778945.html
Copyright © 2011-2022 走看看