資料庫表--index clustered table

jelephant發表於2013-12-08
cluster指一個或多個表組成的組,這些表物理的儲存在相同的資料塊上,有相同聚簇鍵值的所有行相鄰的物理儲存。第一,多個表物理的儲存在一起,多個表資料儲存到同一個資料塊上;第二,包含相同聚簇鍵值的所有資料會物理的儲存在一起。聚簇鍵使用B*樹索引建立


--先建立一個聚族
CREATE CLUSTER emp_dept_cluster(deptno number(6))SIZE 1024;

--在聚簇上建立索引
 CREATE INDEX emp_dept_cluster_index ON CLUSTER emp_dept_cluster;

--建立表
        CREATE TABLE dept1(
               deptno NUMBER(6) PRIMARY KEY,
               dname VARCHAR2(50)
               )CLUSTER emp_dept_cluster(deptno);
        CREATE TABLE emp1(
               empno NUMBER PRIMARY KEY,
               ename VARCHAR2(50),
               sal NUMBER(5,2),
               deptno NUMBER(6),
               FOREIGN KEY(deptno) REFERENCES dept1(deptno)
        )CLUSTER emp_dept_cluster(deptno);
  這樣可以讓兩個表同時用上聚簇索引。一個表只能有一個聚簇索引,但是一個聚簇索引可以包含多個列,稱為組合索引


什麼時候適合是用索引聚簇表:
· 資料主要用於讀(這並不表示“從來不寫”;聚簇表完全可以修改),而且要透過索引來讀(可以是聚簇鍵索引,也可以是聚簇表上的其他索引)
· 需要頻繁地把邏輯上相關而且總是一起使用的表資訊聯結在一起

什麼時候不適合使用聚簇表:
· 如果預料到聚簇中的表會大量修改。索引聚簇會對DML的效能產生某種負面影響。
· 如果需要對聚簇中的某個表執行全表掃描。全表掃描不只是讀取了需要的某個表中的資料,還讀取了其它的多個表中的資料,全表掃描耗時更久。
· 如果需要頻繁地TRUNCATE和載入表。聚簇中的表不能截除,因為聚簇在一個塊上儲存了多個表,必須刪除聚簇表中的行。
· 如果需要對錶進行分割槽。聚簇中的表不能被分割槽。聚簇本身也不能被分割槽


利用聚簇表可以物理的預聯接資料。使用聚簇可以把多個表上的相關資料儲存在同一個資料塊上。聚簇有助於完成總是把資料聯接在一起或訪問相關資料集的讀密集型操作。聚簇表可以減少Oracle必須快取的塊數,提高緩衝區快取的效率。不好的一面是,除非你能正確的計算出size引數設定,否則聚簇在空間利用方面可能效率低下,而且可能會使有大量DML的操作變慢。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29337971/viewspace-1062720/,如需轉載,請註明出處,否則將追究法律責任。

相關文章