Oracle 簇的使用详解
网络编程 2021-07-05 16:08www.168986.cn编程入门
本篇文章是对Oracle中簇的使用进行了详细的分析介绍,需要的朋友参考下
簇其实就是一组表,由一组共享相同数据块的多个表组成,将经常一起使用的表组合在一起成簇可以提高处理效率;在一个簇中的表就叫做簇表。
建立顺序是簇→簇表→簇索引→数据
创建簇的格式
CREATE CLUSTER cluster_name
(column date_type [,column datatype]...)
[PCTUSED 40 | integer] [PCTFREE 10 | integer]
[SIZE integer]
[INITRANS 1 | integer] [MAXTRANS 255 | integer]
[TABLESPACE tablespace]
[STORAGE storage]
SIZE指定估计平均簇键,以及与其相关的行所需的字节数。
1、创建簇
create cluster my_clu (deptno number )
pctused 60
pctfree 10
size 1024
tablespace users
storage (
initial 128 k
next 128 k
minextents 2
maxextents 20
);
2、创建簇表
create table t1_dept(
deptno number ,
dname varchar2 ( 20 )
)
cluster my_clu(deptno);
create table t1_emp(
empno number ,
ename varchar2 ( 20 ),
birth_date date ,
deptno number
)
cluster my_clu(deptno);
3、为簇创建索引
create index clu_index on cluster my_clu;
注若不创建簇索引,则在插入数据时报错ORA-02032: clustered tables cannot be used before the cluster index is built
管理簇
使用ALTER修改簇属性(必须拥有ALTER ANY CLUSTER的权限)
1、修改簇属性
可以修改的簇属性包括
PCTFREE、PCTUSED、INITRANS、MAXTRANS、STORAGE
为了存储簇键值所有行所需空间的平均值SIZE
默认并行度
注
不能修改INITIAL和MINEXTENTS的值
PCTFREE、PCTUSED、SIZE参数修改后适用于所有数据块
INITRANS、MAXTRANS仅适用于以后分配的数据块
STORAGE参数修改后仅影响以后分配给簇的盘区
例
alter cluster my_clu
pctused 40
2、删除簇
drop cluster my_clu; -- 仅适用于删除空簇
drop cluster my_clu including tables ; -- 删除簇和簇表
drop cluster my_clu including tables cascade constraints ;--删除外键约束
注簇表可以像普通表一样删除。
3、清空簇
truncate cluster my_clu;
注所有在此簇上的表的数据全部被清空
散列聚簇表
在簇表中,Oracle使用存储在索引中的键值来定位表中的行,而在散列聚簇表中,使用了散列函数代替了簇索引,先通过内部函数或者自定义的函数进行散列计算,然后再将计算得到的码值用于定位表中的行。创建散列簇需要用到HASHKEYS子句。
1、创建散列簇
create cluster my_clu_two(empno number(10) )
pctused 70
pctfree 10
tablespace users
hash is empno
hashkeys 150 ;
说明
hash is 子句指明了进行散列的列,如果列是唯一的标示行,就可以将列指定为散列值
hashkeys 指定和限制散列函数可以产生的唯一的散列值的数量
2、创建散列表
create table t2_emp (
empno number ( 10 ),
ename varchar2 ( 20 ),
birth_date date ,
deptno number )
cluster my_clu_two(empno);
注意
必须设置数值的精度
散列簇不能也不用创建索引
散列簇不能ALTER:size、hashkeys、hash is参数
不宜用聚簇表的情况
1)如果预料到聚簇中的表会大量修改,聚簇表会对DML的性能产生负面影响
2)非常不适合对单表的全表扫描,因为只能引起对其它表的全表扫描
3)频繁对表进行TRUNCATE和加载,因为聚簇中的表是不能TRUNCATE的,只能TRUNCATE簇
4)如果表只是偶尔被连接或者它们的公共列经常被修改,则不要聚簇表
5)如果经常从所有有相同聚簇键值的表查询出的结果数据超过一个或两个Oracle块,则不要聚簇表
6)如果空间不够,并且不能为将要插入的新记录分配额外的空间,那么不要使用聚簇
建立顺序是簇→簇表→簇索引→数据
创建簇的格式
CREATE CLUSTER cluster_name
(column date_type [,column datatype]...)
[PCTUSED 40 | integer] [PCTFREE 10 | integer]
[SIZE integer]
[INITRANS 1 | integer] [MAXTRANS 255 | integer]
[TABLESPACE tablespace]
[STORAGE storage]
SIZE指定估计平均簇键,以及与其相关的行所需的字节数。
1、创建簇
代码如下:
create cluster my_clu (deptno number )
pctused 60
pctfree 10
size 1024
tablespace users
storage (
initial 128 k
next 128 k
minextents 2
maxextents 20
);
2、创建簇表
代码如下:
create table t1_dept(
deptno number ,
dname varchar2 ( 20 )
)
cluster my_clu(deptno);
create table t1_emp(
empno number ,
ename varchar2 ( 20 ),
birth_date date ,
deptno number
)
cluster my_clu(deptno);
3、为簇创建索引
代码如下:
create index clu_index on cluster my_clu;
注若不创建簇索引,则在插入数据时报错ORA-02032: clustered tables cannot be used before the cluster index is built
管理簇
使用ALTER修改簇属性(必须拥有ALTER ANY CLUSTER的权限)
1、修改簇属性
可以修改的簇属性包括
PCTFREE、PCTUSED、INITRANS、MAXTRANS、STORAGE
为了存储簇键值所有行所需空间的平均值SIZE
默认并行度
注
不能修改INITIAL和MINEXTENTS的值
PCTFREE、PCTUSED、SIZE参数修改后适用于所有数据块
INITRANS、MAXTRANS仅适用于以后分配的数据块
STORAGE参数修改后仅影响以后分配给簇的盘区
例
代码如下:
alter cluster my_clu
pctused 40
2、删除簇
代码如下:
drop cluster my_clu; -- 仅适用于删除空簇
drop cluster my_clu including tables ; -- 删除簇和簇表
drop cluster my_clu including tables cascade constraints ;--删除外键约束
注簇表可以像普通表一样删除。
3、清空簇
代码如下:
truncate cluster my_clu;
注所有在此簇上的表的数据全部被清空
散列聚簇表
在簇表中,Oracle使用存储在索引中的键值来定位表中的行,而在散列聚簇表中,使用了散列函数代替了簇索引,先通过内部函数或者自定义的函数进行散列计算,然后再将计算得到的码值用于定位表中的行。创建散列簇需要用到HASHKEYS子句。
1、创建散列簇
代码如下:
create cluster my_clu_two(empno number(10) )
pctused 70
pctfree 10
tablespace users
hash is empno
hashkeys 150 ;
说明
hash is 子句指明了进行散列的列,如果列是唯一的标示行,就可以将列指定为散列值
hashkeys 指定和限制散列函数可以产生的唯一的散列值的数量
2、创建散列表
代码如下:
create table t2_emp (
empno number ( 10 ),
ename varchar2 ( 20 ),
birth_date date ,
deptno number )
cluster my_clu_two(empno);
注意
必须设置数值的精度
散列簇不能也不用创建索引
散列簇不能ALTER:size、hashkeys、hash is参数
不宜用聚簇表的情况
1)如果预料到聚簇中的表会大量修改,聚簇表会对DML的性能产生负面影响
2)非常不适合对单表的全表扫描,因为只能引起对其它表的全表扫描
3)频繁对表进行TRUNCATE和加载,因为聚簇中的表是不能TRUNCATE的,只能TRUNCATE簇
4)如果表只是偶尔被连接或者它们的公共列经常被修改,则不要聚簇表
5)如果经常从所有有相同聚簇键值的表查询出的结果数据超过一个或两个Oracle块,则不要聚簇表
6)如果空间不够,并且不能为将要插入的新记录分配额外的空间,那么不要使用聚簇
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程