1、簇概念:
是一组表,如果应用程序中的SQL 语句经常联结两个或多个表,可以把这些表以簇方式进行创建以改善性能。簇中的表存储在相同的数据块中,并且各个表中的相同的列值只存储一个。
簇(Cluster)就是将一组有机联系的表在物理上存放在一起并且相同的关键列的值只存储一份,用于提高处理效率的一项技术
2 限制:
l 簇中的每个表必须有一列与簇中指定的列的 大小和类型匹配;
l 簇码中可用列的最大数目是16,即一个簇最多有16列作为簇码;
l 列的最大长度为239字节;
l LONG 和LONG RAW 不能作为簇列码。
3 3 建立簇:
1) 创建簇语法
CREATE CLUSTER cluster
( column datatype[,colmn datatype]…)
[PCTUSED 40|intger] [ PCTFREE 10| intger]
[ SIZE intger ]
[INITRANS 1|intger] [MAXTRANS 255|intger]
[TABLESPACE tablespace]
[STORAGE storage]
2)创建簇及其表的步骤:
l 用 CREATE CLUSTER创建簇
l 用CREATE INDEX创建簇索引
l 用CREATE TABLE 创建表,并指定簇
l 插入数据并进行DML 操作
4 改变簇:
在用户具有 ALTER ANY CLUSTER 的权限情况下,可以对已建好的簇(CLUSTER )改变其设置,如:
l 物理属性:PCTFREE,PCTUSED,INITRANS,MAXTRANS和STORAGE;
l 为CLUSTER 关键字值存储所有行所需的一般空间容量;
l 缺省平行度。
命令语法:
ALTER CLUSTER Cluster_name
{ PCTUSED integer
| PCTFREE integer
| SIZE integer
| INITRANS integer
| MAXTRANS integer
| STORAGE Cluase
}
5 删除簇:
只要用户具有 DROP ANY CLUSTER权限均可以对所有的CLUSTER进行删除。
语法如下:
DROP CLUSTER [user.]cluster [INCLUDING TABLES]
6 收集簇信息:
删除簇索引:一个簇的索引可以被删除而不影响表的数据,但是当簇的索引被删除后,属于该簇的表就变为不可用,所以当删除簇的索引后还须再建立该簇的索引才行。有时为了消除盘空间的碎片我们常进行删除簇索引操作。
l DBA_CLU_COLUMNS 或USER_CLU_COLUMNS
l DBA_CLUSTERS或USER_CLUSTER
1,簇
有公共列的两个或多个表的集合
簇表中的数据存储在公共数据块中
2,簇键
簇中行的唯一标识符
用于获取行
3,创建簇
应首先创建簇,然后创建组成簇的表
CREATE CLUSTER 语句用于创建簇
优点
减少磁盘I/O
节省磁盘空间(表的公共列存储在簇中)
缺点
向表中插入数据时性能降低
有主外键关系的表,可以考虑创建簇,把公共的列放到簇中
4,创建簇的详细例子
--创建簇数据(把公共列创建到簇中)
create cluster cluster_ClassNo
(
vClassNo varchar2(10)
)tablespace users;
--为簇键创建簇索引
create index idxClusterClassNo on cluster cluster_ClassNo;
--创建簇表(主键表、外键表)
//创建主键表——班级表
create table classes
(
vClassNo varcahr2(10),
vClassName varchar2(20)
)cluster cluster_ClassNo(vClassNo);
//创建外键表——学生表
create table students
(
vStudentNo varchar2(10),
vStudentName varchar2(20),
vClassNo varchar2(10)
)cluster cluster_ClassNo(vClassNo);
--撤消簇
drop cluster cluster_ClassNo including tables;
————————————————————————————————
————————————————————————————————
SQL> create cluster cluster_ClassNo
2 (
3 vClassNo varchar2(10)
4 )tablespace users;
已创建数据簇。
SQL> create index idxClustClassNo on cluster cluster_ClassNo;
索引已创建。
SQL> create table classes
2 (
3 vClassNo varchar2(10),
4 vClassName varchar2(20)
5 )cluster cluster_ClassNo(vClassNo);
表已创建。
SQL> create table students
2 (
3 vStudentNo varchar2(10),
4 vStudentName varchar2(20),
5 vClassNo varchar2(10)
6 )cluster cluster_ClassNo(vClassNo);
表已创建。
SQL> drop cluster cluster_ClassNo including tables;
数据簇已丢弃。
原文地址:http://rscpass.blog.51cto.com/771159/1612744