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;

已刪除叢集.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值