- 相關(guān)推薦
Oracle數據庫的聚簇技術(shù)
聚簇是根據碼值找到數據的物理存儲位置,從而達到快速檢索數據的目的。聚簇索引的順序就是數據的物理存儲順序,葉節點(diǎn)就是數據節點(diǎn)。非聚簇索引的順序與數據物理排列順序無(wú)關(guān),葉節點(diǎn)仍然是索引節點(diǎn),只不過(guò)有一個(gè)指針指向對應的數據塊。一個(gè)表最多只能有一個(gè)聚簇索引。
使用 Oracle 聚簇索引
聚簇是一種存儲表的方法,這些表密切相關(guān)并經(jīng)常一起連接進(jìn)磁盤(pán)的同一區域。例如,表 BOOKSHELF 和BOOKSHELF_AUTHOR 數據行可以一起插入到稱(chēng)為簇(Cluster)的單個(gè)區域中,而不是將兩個(gè)表放在磁盤(pán)上的不同扇區上。簇鍵(Cluster Key)可以是一列或多列,通過(guò)這些列可以將這些表在查詢(xún)中連接起來(lái)(例如,BOOKSHELF表和BOOKSHELF_AUTHOR表中的 Title列)。為了將表聚集在一起,必須擁有這些將要聚集在一起的表。
下面是create cluster命令的基本格式:
|
cluster的名字遵循表命名約定,column datatype是將作為簇鍵使用的名字和數據類(lèi)型。column的名字可以與將要放進(jìn)該簇中的表的一個(gè)列名相同,或者為其他有效名字。下面是一個(gè)例子:
|
這樣就建立了一個(gè)沒(méi)有任何內容的簇(象給表分配了一塊空間一樣)。COL1的使用對于簇鍵是不相干的,不會(huì )再使用它。但是,它的定義應該與要增加的表的主鍵相符。接下來(lái),建立包含在該簇中的表:
|
在向BOOKSHELF表中插入數據行之前,必須建立一個(gè)聚簇索引:
|
在上面的create table語(yǔ)句中,簇BOOKandAUTHOR(Title)子句放在表的列清單的閉括號的后面。BOOKandAUTHOR是前面建立的聚簇的名字。Title是將存儲到聚簇Col1中的該表的列。create cluster語(yǔ)句中可能會(huì )有多個(gè)簇鍵,并且在created table語(yǔ)句中可能有多個(gè)列存儲在這些鍵中。請注意,沒(méi)有任何語(yǔ)句明確說(shuō)明Title列進(jìn)入到Col1中。這種匹配僅僅是通過(guò)位置做到的,即Col1和Title都是在它們各自的簇語(yǔ)句中提到的第一個(gè)對象。多個(gè)列和簇鍵是第一個(gè)與第一個(gè)匹配,第二個(gè)與第二個(gè)匹配,第三個(gè)與第三個(gè)匹配,等等,F在,添加第二個(gè)表到聚簇中:
|
當這兩個(gè)表被聚在一起時(shí),每個(gè)唯一的Title在簇中實(shí)際只存儲一次。對于每個(gè)Title,都從這兩個(gè)表中附加列。
來(lái)自這兩個(gè)表的數據實(shí)際上存放在一個(gè)位置上,就好像簇是一個(gè)包含兩個(gè)表中的所有數據的大表一樣。
散列聚簇
對于散列聚簇,它只有一個(gè)表。它通過(guò)散列算法求出存儲行的物理存儲位置,從而快速檢索數據。創(chuàng )建散列聚簇時(shí)要指定碼列的數據類(lèi)型,數據行的大小及不同碼值的個(gè)數。如果碼值不是平均分布的,就可能有許多行存儲到溢出塊上,從而會(huì )降低查詢(xún)該表的SQL語(yǔ)句的性能。
散列聚簇被用在總是通過(guò)主鍵查詢(xún)數據的情況,例如要從表 T 查詢(xún)數據并且查詢(xún)語(yǔ)句總是是這樣:
|
這時(shí)散列聚簇是一個(gè)好的選擇,因為不需要索引。Oracle 將通過(guò)散列算法得到值 :x 所對應的物理地址,從而直接取到數據。不用進(jìn)行索引掃描,只通過(guò)散列值進(jìn)行一次表訪(fǎng)問(wèn)。
散列聚簇語(yǔ)法示例:
|
【Oracle數據庫的聚簇技術(shù)】相關(guān)文章:
Oracle數據庫語(yǔ)句大全10-08
ORACLE數據庫碎片的整理08-18
oracle數據庫基本語(yǔ)句08-21
Oracle數據庫認證層次08-29
Oracle數據庫的基本介紹09-04
Oracle數據庫SQLPLUS介紹10-09
Oracle 數據庫查詢(xún)小技巧10-17
oracle數據庫基礎知識07-26
Oracle數據庫基本知識09-13