Oracle ---- 簇(聚集)--cluster(转)
Oracle基----簇(聚集)
Cluster就是把常的表在物理上存在一起,它是存表的一种方法,具有同一公共列值得行存在一起,些公共列成聚集(Cluster Key).
:只存了一聚集值,有效省存空,改存取,少磁I/O的次。
缺:同一表,不用聚集,行insert,delte,update可能降低行速度,
使用:用于更新少的表。
建簇,用必具有create cluster系限以及有足的表空配。
其他用穿件簇的,必有create any cluster的系限。
对象的存储定义与cluster有关,而不是与表有关.因为聚簇中有很多表
create cluster emp_dept_cluster (deptno number(2)) size 1024
size参数影响着一个数据块上聚簇键的多少.也是影聚簇表的空间利用率.
建簇表,必有create table或create any table系限,建簇,可是使用cluster字句的create table命令。
1:簇表
簇是一种用于存表中的方法,上是一表,由一共享相同的多表成。些表有公共的列,且常一起使用。
多不同表的相行一起存到相同的中,也聚集。所以合理使用簇可以助少查所需要的磁取量,於常使用的表而言,不使用簇。
散列簇和索引簇
散列簇表似簇表,索引簇表中,ORACLE使用存在索引中的值定位表中的行,但是,使用散列函代替了簇索引,散列簇表中,oracle用行的值,使用内部函或者自定的函行散列算,而指定的存放位置。
散列簇上不能建索引,也不需要建索引。
聚集索引:
簇表中添加,必簇建立索引,用必有create any index的系限,同必具有足的表空或者有unlimited tablespace系限。
Create index emp_dept_index on clusteremp_dept_cluster tablespace users
Storate(initial 50k,next 50k minextents 2 maxextents 10 pctincrease 33);
簇修改性:
1:物理性,如initrans和一些存特性
2:簇内存所有行的存的存空
3:默的行度
Alter clusteremp_dept_cluster size20mtalbespace users parallel2storage (initial 2k next 3k minextents3 maxextents 5 initrans 6 pctincrease 6);
Size k|m|g置存具有同一聚集的所有行的空大小
Tablespace表空
Parallel整/ noparallel置行建句 或一些DML句的行度
默noparallel,即不行任何行操作。
Storage:置聚集的存。
Drop cluster:
相的表和相得聚集索引也被DROP,同用的空也放表空,格式:
Drop clusteremp_dept_clusterincluding tables cascade constraints
Inluding tables:簇表和簇一起drop
Cascade constraints: drop掉依簇的完整性束。
簇在oracle中的:
DBA_CLUSTERS
ALL_CLUSTERS
USER_CLUSTERS
DBA_CLU_COLUMNS
USER_CLU_COLUMNS
SYS AS SYSDBA on 2008-02-22 15:20:38 at ORCL>desc dba_clu_columns;
名 空值? 型
----------------------------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
CLUSTER_NAME NOT NULL VARCHAR2(30)
CLU_COLUMN_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
TAB_COLUMN_NAME VARCHAR2(4000)
簇使用的例子:
散列簇:
SYS AS SYSDBA on 2008-02-22 11:53:49 at ORCL>create cluster emp_hash_clu(empno number(10))
2 pctused 70 pctfree 10 tablespace users hash is empno hashkeys 150
3 /
已建立集.
SYS AS SYSDBA on 2008-02-22 12:06:01 at ORCL>create table emp(empno number(10) primary key,
2 ename varchar2(15) not null, date_of_birth date,deptno number(10)) cluster emp_hash_clu(empno);
已建立表格.
Hash is ,size,hashkeys簇的性能影很大,合理置些。
Size所有行所需空的平均大小
句中使用了默的内部散列函,hash is字句指定了行散列的列,如果列是唯一的行,就可以制定散列值,hashkeys指定和限制散列函可以生的唯一的散列值得量,具有同一散列值得存在一起。
散列簇的相:
DBA_CLUSTERS
ALL_CLUSTERS
USER_CLUSTERS
DBA_CLU_COLUMNS
USER_CLU_COLUMNS
示散列聚集函的信息,如散列函的表式。
Dba_cluster_hash_expressions
All_cluster_hash_expressions
User_cluster_hash_expressions
SYS AS SYSDBA on 2008-02-22 11:41:30 at ORCL>edit
已file afiedt.buf入
1 create cluster stu_dep_clu(dept_id varchar2(10))
2 pctused 70
3 pctfree 10
4 size 1024
5 tablespace users
6* storage(initial 200k next 300k maxextents 20)
SYS AS SYSDBA on 2008-02-22 11:41:47 at ORCL>/
已建立集.
SYS AS SYSDBA on 2008-02-22 11:43:13 at ORCL>edit
已file afiedt.buf入
1 create table department(
2 dept_id varchar2(10) primary key,
3 dep_name varchar2(20),
4 office varchar2(20))
5* cluster stu_dep_clu(dep_id)
SYS AS SYSDBA on 2008-02-22 11:43:21 at ORCL>/
cluster stu_dep_clu(dep_id)
*
ERROR在行5:
ORA-00945: specified clustered column does not exist
SYS AS SYSDBA on 2008-02-22 11:43:22 at ORCL>edit
已file afiedt.buf入
1 create table department(
2 dept_id varchar2(10) primary key,
3 dep_name varchar2(20),
4 office varchar2(20))
5* cluster stu_dep_clu(dept_id)
SYS AS SYSDBA on 2008-02-22 11:43:29 at ORCL>/
已建立表格.
SYS AS SYSDBA on 2008-02-22 11:43:31 at ORCL>create table student(
2 stu_id varchar2(10) primary key,
3 stu_name varchar2(15),
4 sex char(2),
5 dep_id varchar2(10) references department(dept_id))
6 cluster stu_dep_clu(dep_id);
已建立表格.
SYS AS SYSDBA on 2008-02-22 11:47:54 at ORCL>create index stu_dep_index on clu
;
已建立索引.
SYS AS SYSDBA on 2008-02-22 11:49:05 at ORCL>insert into department(dept_id,de
2 values('A2324','yes','22eee');
已建立1料列.
SYS AS SYSDBA on 2008-02-22 11:49:53 at ORCL>insert into student(stu_id,stu_na
2 values('s2223','liming','m','A2324');
已建立1料列.
SYS AS SYSDBA on 2008-02-22 11:51:21 at ORCL>drop cluster stu_dep_clu including tables;
已除集.