oracle的簇与簇表
2015-09-02 15:02
483 查看
簇由一组共享多个数据块的多个表组成,它将这些表的相关行一起存储到相同数据块中,这样可以减少查询数据所需的磁盘读取量。创建簇后,用户可以在簇中创建表,这些表称为簇表。
例如有如下两个表:student和achievement.。其中,student表存储学生信息,需要使用SID字段(存储学生ID);achievement表存储学生成绩信息,也需要使用SID字段。也就是说,student和achievement需要共享学生ID数据块。
注意:如果用户在自己的模式中创建簇,则必须具有create cluster权限和unlimited tablespace系统权限;如果想在其他模式中创建簇,则还必须具有create any cluster系统权限
注意:size子句用来为聚簇字段提供指定的数据块数量。例如,将size设置为1024,即表明簇中的聚簇字段记录只能存储在1024个数据块中。
例如,在stu_ach簇中创建两个簇表:student和achievement。如下:
提示:将student和achievement两个表组成一个簇后,在物理上oracle会将这两个表中每个学生的学生信息和该学生的所有成绩信息存储到相同的数据块中。
现在向student表中添加记录,如下:
注意:为了能够向簇表中添加记录,还需要首先为簇建立索引。
例如,为簇stu_ach建立一个簇索引,如下:
1.物理存储属性,包括pctfree、pctused、initrans、maxtrans和storage。
2.为了存储簇键值的所有行所需空间的平均值size。
3.默认的并行度。
2.删除一个含有簇表的簇:需要使用drop cluster...including tables语句,如下
例如有如下两个表:student和achievement.。其中,student表存储学生信息,需要使用SID字段(存储学生ID);achievement表存储学生成绩信息,也需要使用SID字段。也就是说,student和achievement需要共享学生ID数据块。
注意:如果用户在自己的模式中创建簇,则必须具有create cluster权限和unlimited tablespace系统权限;如果想在其他模式中创建簇,则还必须具有create any cluster系统权限
创建簇和簇表
创建簇
创建簇,需要使用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个数据块中。
创建簇表
创建簇表,需要使用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 cascade constraints;
相关文章推荐
- 查询ORACLE表空间或者数据文件每次扩展大小
- oracle中的exists 和not exists 用法 in与exists语句的效率问题
- oracle pause命令使用
- oracle define,undefine,ACCEPT,以及变量的获取 命令
- Oracle常用命令
- Oracle日常性能查看
- Oracle 三种方法
- oracle spool
- mysql插入日期 vs oracle插入日期
- 详解Oracle数据库各类控制语句的使用
- 对比Oracle临时表和SQL Server临时表的不同点
- oracle for update和for update nowait的区别
- Oracle 多行转多列,列值转为列名
- oracle与mysql 数据库sql 分页查询
- oracle与sqlserver处理判断字段是否为空
- Oracle timestamp
- 如何实现只授予用户查看存储过程定义的权限
- Oracle分页函数(存储过程)
- PL/SQL与SQL(Oracle)Case语句
- Oracle数据库远程连接的方法