日期:2014-05-16  浏览次数:20678 次

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))