當前位置:才華齋>IT認證>Oracle認證>

Oracle資料庫的聚簇技術

Oracle認證 閱讀(8.44K)

聚簇是根據碼值找到資料的物理儲存位置,從而達到快速檢索資料的目的。聚簇索引的順序就是資料的物理儲存順序,葉節點就是資料節點。非聚簇索引的順序與資料物理排列順序無關,葉節點仍然是索引節點,只不過有一個指標指向對應的資料塊。一個表最多隻能有一個聚簇索引。

Oracle資料庫的聚簇技術

  使用 Oracle 聚簇索引

聚簇是一種儲存表的方法,這些表密切相關並經常一起連線進磁碟的同一區域。例如,表 BOOKSHELF 和BOOKSHELF_AUTHOR 資料行可以一起插入到稱為簇(Cluster)的單個區域中,而不是將兩個表放在磁碟上的不同扇區上。簇鍵(Cluster Key)可以是一列或多列,通過這些列可以將這些表在查詢中連線起來(例如,BOOKSHELF表和BOOKSHELF_AUTHOR表中的 Title列)。為了將表聚集在一起,必須擁有這些將要聚集在一起的表。

下面是create cluster命令的基本格式

create cluster (column datatype [, column datatype]...) [other options];

cluster的名字遵循表命名約定,column datatype是將作為簇鍵使用的名字和資料型別。column的名字可以與將要放進該簇中的表的`一個列名相同,或者為其他有效名字。下面是一個例子:

create cluster BOOKandAUTHOR (Col1 VARCHAR2(100));

這樣就建立了一個沒有任何內容的簇(象給表分配了一塊空間一樣)。COL1的使用對於簇鍵是不相干的,不會再使用它。但是,它的定義應該與要增加的表的主鍵相符。接下來,建立包含在該簇中的表:

create table BOOKSHELF    (Title VARCHAR2(100) primary key,    Publisher VARCHAR2(20),    CategoryName VARCHAR2(20),    Rating VARCHAR2(2),    constraint CATFK foreign key (CategoryName) references CATEGORY(CategoryName)    )    cluster BOOKandAUTHOR(Title);

在向BOOKSHELF表中插入資料行之前,必須建立一個聚簇索引:

create index BOOKandAUTHORndx on cluster BOOKandAUTHOR;

在上面的create table語句中,簇BOOKandAUTHOR(Title)子句放在表的列清單的閉括號的後面。BOOKandAUTHOR是前面建立的聚簇的名字。Title是將儲存到聚簇Col1中的該表的列。create cluster語句中可能會有多個簇鍵,並且在created table語句中可能有多個列儲存在這些鍵中。請注意,沒有任何語句明確說明Title列進入到Col1中。這種匹配僅僅是通過位置做到的,即Col1和Title都是在它們各自的簇語句中提到的第一個物件。多個列和簇鍵是第一個與第一個匹配,第二個與第二個匹配,第三個與第三個匹配,等等。現在,新增第二個表到聚簇中:

create table BOOKSHELF_AUTHOR    (Title VARCHAR2(100),    AuthorName VARCHAR2(50),    constraint TitleFK Foreign key (Title) references BOOKSHELF(Title),    constraint AuthorNameFK Foreign key (AuthorName) references AUTHOR(AuthorName)    )    cluster BOOKandAUTHOR (Title);

當這兩個表被聚在一起時,每個唯一的Title在簇中實際只儲存一次。對於每個Title,都從這兩個表中附加列。

來自這兩個表的資料實際上存放在一個位置上,就好像簇是一個包含兩個表中的所有資料的大表一樣。

  雜湊聚簇

對於雜湊聚簇,它只有一個表。它通過雜湊演算法求出儲存行的物理儲存位置,從而快速檢索資料。建立雜湊聚簇時要指定碼列的資料型別,資料行的大小及不同碼值的個數。如果碼值不是平均分佈的,就可能有許多行儲存到溢位塊上,從而會降低查詢該表的SQL語句的效能。

雜湊聚簇被用在總是通過主鍵查詢資料的情況,例如要從表 T 查詢資料並且查詢語句總是是這樣:

select * from T where id = :x;

這時雜湊聚簇是一個好的選擇,因為不需要索引。Oracle 將通過雜湊演算法得到值 :x 所對應的實體地址,從而直接取到資料。不用進行索引掃描,只通過雜湊值進行一次表訪問。

雜湊聚簇語法示例:

CREATE CLUSTER personnel    ( department_number NUMBER )    SIZE 512 HASHKEYS 500    STORAGE (INITIAL 100K NEXT 50K);    CREATE CLUSTER personnel    ( home_area_code NUMBER,    home_prefix NUMBER )    HASHKEYS 20    HASH IS MOD(home_area_code + home_prefix, 101);    CREATE CLUSTER personnel    (deptno NUMBER)    SIZE 512 SINGLE TABLE HASHKEYS 500;