聚簇是指:如果一组表有一些共同的列,则将这样一组表存储在相同的数据库块中;聚簇还表示把相关的数据存储在同一个块上。利用聚簇,
一个块可能包含多个表的数据。概念上就是如果两个或多个表经常做链接操作,那么可以把需要的数据预先存储在一起。聚簇还可以用于单个表,
可以按某个列将数据分组存储。
更加简单的说,比如说,EMP表和DEPT表,这两个表存储在不同的segment中,甚至有可能存储在不同的TABLESPACE中,因此,他们的数据一定不会
在同一个BLOCK里。而我们有会经常对这两个表做关联查询,比如说:select * from emp,dept where emp.deptno = dept.deptno .仔细想想,查询
主要是对BLOCK的操作,查询的BLOCK越多,系统IO就消耗越大。如果我把这两个表的数据聚集在少量的BLOCK里,查询效率一定会提高不少。
1.创建一个簇
size参数,代表所有包含deptno字段的行的平均长度
create cluster my_clu(deptno number) size 38;(在cluster下创建的表的这个字段deptno必须有且数据类型要一致)
2.在簇下面创建簇表
create table d(deptno number,dname varchar2(14),loc varchar2(13)) cluster my_clu(deptno);
3.尝试对D表做插入操作
SQL> insert into d select * from dept;
insert into d select * from dept
*
ERROR at line 1:
ORA-02032: clustered tables cannot be used before the cluster index is built
报错,提示,簇在没有索引的情况下,不允许对簇下面的所有簇表做DML操作
4.创建簇的索引
create index idx_clu on cluster my_clu;
再次尝试插入,成功
insert into d select * from dept;
5.再创建一张簇表
create table e(
EMPNO NUMBER(4),
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER)
cluster test(deptno);
insert into e select * from emp;
6.检查创建的簇表
select * from tab;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
D TABLE 1
DEPT TABLE
E TABLE 2
EMP TABLE
MY_CLU CLUSTER
SALGRADE TABLE
7.删除簇表,与删除普通的表一样
drop table e purge;
8.删除簇
drop cluster my_clu;
drop cluster my_clu
*
ERROR at line 1:
ORA-00951: cluster not empty
在簇中有簇表的情况下,不能直接删除cluster簇
删除簇的同时,删除簇中所有的簇表
drop cluster my_clu including tables;
删除的时候,还要同时删除外键约束
drop cluster my_clu including tables cascade constraints;
filelist链表才会使用cluster
现在是本地管理,不会使用cluster
cluseter:是,在物理上就是扎堆的意思
如果了解表的平均的行长,就可以使用size(平均行长)
SQL> create cluster test(deptno number)
2 size 1024;
Cluster created.
如果不知道就走默认
SQL> create cluster test1(deptno number)--cluster表要有cluster的字段
Cluster created.
将普通的表--------->cluster要先收集统计信息,确定行长
收集统计信息的时候cascade=true就是连索引一起收集
cluster:里面有很多表,所有表的平均行长来设置
表不多的情况下,使用最大的行长
SQL> select table_name,avg_row_len from user_tables;
TABLE_NAME AVG_ROW_LEN
------------------------------ -----------
DEPT 20
EMP 38
cluster表中的数据类型与cluster中的数据类要一致
alter table emp enable constraint emp_fk;取消主键
alter table emp disable constraint emp_fk;激活主键