Oracle索引的實(shí)際操作步驟
其實(shí)創(chuàng)建Oracle索引是提高相關(guān)檢索的效率中最有效的方法,索引就是把表中的相關(guān)邏輯直接值映射到安全的RowID,而且能快速來定位相關(guān)數(shù)據(jù)的物理地址,可以大大加快數(shù)據(jù)庫的查詢速度。
一個(gè)建有合理索引的數(shù)據(jù)庫應(yīng)用系統(tǒng)可能比一個(gè)沒有建立索引的數(shù)據(jù)庫應(yīng)用系統(tǒng)效率高幾十倍,但并不是索引越多越好,在那些經(jīng)常需要修改的數(shù)據(jù)列上建立索 引,將導(dǎo)致索引B*樹的不斷重組,造成系統(tǒng)性能的下降和存儲空間的浪費(fèi)。
對于一個(gè)大型表建立的索引,有時(shí)并不能改善數(shù)據(jù)查詢速度,反而會影響整個(gè)數(shù)據(jù)庫的性能。這主要是和SGA的數(shù)據(jù)管理方式有關(guān),Oracle在進(jìn)行數(shù)據(jù)塊高速緩存管理時(shí),索引數(shù)據(jù)比普通數(shù)據(jù)具有更高的駐留權(quán)限。
在進(jìn)行空間競爭時(shí), Oracle會先移出普通數(shù)據(jù),對建有Oracle索引的大型表進(jìn)行數(shù)據(jù)查詢時(shí),索引數(shù)據(jù)可能會用完所有的數(shù)據(jù)塊緩存空間,Oracle不得不頻繁地進(jìn)行磁盤讀寫來獲取數(shù)據(jù),所以,在對一個(gè)大型表進(jìn)行分區(qū)之后,可以根據(jù)相應(yīng)的分區(qū)建立分區(qū)索引。
Oracle提供了另一種方法來提高查詢速度,就是聚簇(Cluster)。所謂聚簇,簡單地說就是把幾個(gè)表放在一起,按一定公共屬性混合存放。聚簇根據(jù)共同碼值將多個(gè)表的數(shù)據(jù)存儲在同一個(gè)Oracle塊中,這時(shí)檢索一組Oracle塊就同時(shí)得到兩個(gè)表的數(shù)據(jù),這樣就可以減少需要存儲的Oracle塊,從而提高應(yīng)用程序的性能。
對于邏輯結(jié)構(gòu)的優(yōu)化,還應(yīng)將表數(shù)據(jù)和索引數(shù)據(jù)分開表空間存儲,分別使用獨(dú)立的表空間。因?yàn)槿绻麑⒈頂?shù)據(jù)和索引數(shù)據(jù)放在一起,表數(shù)據(jù)的I/O操作和索引的I/O操作將產(chǎn)生影響系統(tǒng)性能的I/O競爭,降低系統(tǒng)的響應(yīng)效率。將表數(shù)據(jù)和Oracle索引數(shù)據(jù)存放在不同的表空間中,并在物理層面將這兩個(gè)表空間的數(shù)據(jù)文件放在不同的物理磁盤上,就可以避免這種競爭了。
上述的相關(guān)內(nèi)容就是對Oracle索引與聚簇的描述,希望會給你帶來一些幫助在此方面。
【編輯推薦】