Oracle 資料庫的聚簇技術

2021-04-08 23:36:11 字數 2667 閱讀 1266

1. 什麼是聚簇

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

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

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 所對應的實體地址,從而直接取到資料。不用進行索引掃瞄,只通過雜湊值進行一次表訪問。

雜湊聚簇語法示例:

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;

Oracle資料庫技術實用詳解

1.安裝oracle10g linux 1.1 設定linux安裝環境 su root vi etc sysctl.conf 在檔案末尾新增 調節核心等引數 kernel.shmall 2097152 kernel.shmmax 2147483648 kernel.shmmni 4096 kerne...

Oracle資料庫效能優化技術

oracle恢復管理 rman 有很多可以用來幫助備份和恢復程序的功能,該工具具有命令列和gui兩種版本。通常,rman 執行並標準化備份和恢復程序,並且通過其操作,減少dba在此過程中犯的錯誤。rman 的主要功能如下所示 1.備份資料庫 表空間 資料檔案 控制檔案和歸檔日誌 rman 工具能以很...

Oracle的聚簇因子對於查詢IO的影響

oracle中,對於同乙個查詢語句,有時候會很快的完成,有時候卻很慢,但是表結構什麼的完全一致,表中的資料也完全一致,這個具體是什麼願意呢,就要從index中的細節說起了。在oracle中的乙個特殊的檢視user indexes中有乙個特殊的列,名字是clustering factor,這個值的內容...