转载: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的簇,如下:
2.创建簇表
创建簇表,需要使用cluster子句指定所使用的簇和簇字段。
例如,在stu_ach簇中创建两个簇表:student和achievement。如下:
提示:将student和achievement两个表组成一个簇后,在物理上oracle会将这两个表中每个学生的学生信息和该学生的所有成绩信息存储到相同的数据块中。
现在向student表中添加记录,如下:
insert into student values(1,'小明',24);
发现还无法向簇表中添加记录。
注意:为了能够向簇表中添加记录,还需要首先为簇建立索引。
创建簇索引
簇索引与簇表不同,它并不存在于簇中,而是与普通索引一样需要具有独立的存储空间。
例如,为簇stu_ach建立一个簇索引,如下:
管理簇
对一个簇的管理主要是修改簇和删除簇。如果用户想要管理簇,则必须具有alter any cluster系统权限。
修改簇
修改一个簇,主要是修改簇的如下属性值:
1.物理存储属性,包括pctfree、pctused、initrans、maxtrans和storage。
2.为了存储簇键值的所有行所需空间的平均值size。
3.默认的并行度。
删除簇
1.删除一个空簇:当一个簇中不包含簇表时,删除该簇可以使用drop cluster cluster_name语句。
2.删除一个含有簇表的簇:需要使用drop cluster...including tables语句,如下