簇由一组共享多个数据块的多个表组成,它将这些表的相关行一起存储到相同数据块中,这样可以减少查询数据所需的磁盘读取量。创建簇后,用户可以在簇中创建表,这些表称为簇表。
例如有如下两个表:student和achievement.。其中,student表存储学生信息,需要使用SID字段(存储学生ID);achievement表存储学生成绩信息,也需要使用SID字段。也就是说,student和achievement需要共享学生ID数据块。
注意:如果用户在自己的模式中创建簇,则必须具有create cluster权限和unlimited tablespace系统权限;如果想在其他模式中创建簇,则还必须具有create any cluster系统权限
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字段就可以称之为聚簇字段。
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。
insert into student values(1,'小明',24);发现还无法向簇表中添加记录。
create index stu_ach_index on cluster stu_ach tablespace huizhi;上例为簇stu_ach建立了一个名为stu_ach_index的簇索引。创建簇索引后,就可以向簇表中添加记录了。
drop cluster stu_ach including tables;另外,如果某个簇含有簇表,并且有外键约束,则需要使用drop cluster...including tables cascade constraints语句删除该簇。如下:
drop cluster stu_ach including tables cascade constraints;