oracle聚簇索引

2021-08-30 20:06:54 字數 2420 閱讀 6784

很多初學者,在接觸oracle資料庫後,都會很疑惑oracle聚簇索引是什麼,如何使用oracle聚簇索引,oracle雜湊聚簇又與oracle聚簇索引有什麼關係。本文針對這3個問題結合相關資料,給出了點看法。

1. 什麼是聚簇

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

2. 使用 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表中插入資料行之前,必須建立乙個oracle聚簇索引:

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,都從這兩個表中附加列。

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

3. 雜湊聚簇

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

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

select * from t where id = :x;

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

--摘自網路,感謝作者

聚簇索引和非聚簇索引

一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...

聚簇索引和非聚簇索引

一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以存...

聚簇索引和非聚簇索引

一 聚簇索引 clustered indexes 的使用 聚簇索引是一種對磁碟上實際資料重新組織以按指定的乙個或多個列的值排序。由於聚簇索引的索引頁面指標指向資料頁面,所以使用聚簇索引查詢資料幾 乎總是比使用非聚簇索引快。每張表只能建乙個聚簇索引,並且建聚簇索引需要至少相當該錶120 的附加空間,以...