歐 萍
(貴陽學院物理與電子信息科學系,貴州貴陽 550003)
數據庫設立的一個主要目的就在于實現對之進行高效的管理。伴隨著信息化程度的不斷加深,因特網技術的不斷發展,數字信息呈現出爆炸式、幾何級數增加的趨勢,數字信息的存儲總量越來越大,這給數據存儲及管理技術帶來了新的挑戰。同時,數據的格式和種類也在不斷的增加,而且數據的類型也由簡單的字符處理相字符及圖像處理的方向發展。面對著這樣一個形式,如何保證信息收尋者準確高效地從海量的信息中獲取想要的數據,已成為數據庫設計人員的首要任務。下面在介紹索引相關的基本概念以及建立索引的優缺點的基礎上,對有效地設置數據庫索引進行了詳細的論述,最后結合具體的實例對數據庫索引技術的應用進行了較為詳細的闡述。
索引的一個主要目的就是加快檢索表中數據的方法,亦即能協助信息搜索者盡快的找到符合限制條件的記錄ID的輔助數據結構。從數據搜索實現的角度來看,索引也是另外一類文件/記錄,它包含著可以指示出相關數據記錄的各種記錄。其中,每一索引都有一個相對應的搜索碼,字符段的任意一個子集都能夠形成一個搜索碼。這樣,索引就相當于所有數據目錄項的一個集合,它能為既定的搜索碼值的所有數據目錄項提供定位所需的各種有效支持。
(1)搜索碼。它表示的是記錄各種字符段的一個集合,它可以是一個或者是多個字符段的任意序列組合,并不是惟一的一個標識記錄。
(2)數據目錄項。即為索引的相關元素,在建立索引的過程中,數據目錄項一般具有各種不同的選擇方式。
(3)記錄ID。每一個/段索引在存儲內容中惟一的一個標識符。
1.2.1 建立索引的優點
通過建立索引可以極大地提高在數據庫中獲取所需信息的速度,同時還能提高服務器處理相關搜索請求的效率,從這個方面來看它具有以下優點:
(1)在設計數據庫時,通過創建一個惟一的索引,能夠在索引和信息之間形成一對一的映射式的對應關系,增加數據的惟一性特點。
(2)能提高數據的搜索及檢索速度,符合數據庫建立的初衷。
(3)能夠加快表與表之間的連接速度,這對于提高數據的參考完整性方面具有重要作用。
(4)在信息檢索過程中,若使用分組及排序子句進行時,通過建立索引能有效的減少檢索過程中所需的分組及排序時間,提高檢索效率。
(5)建立索引之后,在信息查詢過程中可以使用優化隱藏器,這對于提高整個信息檢索系統的性能具有重要意義。
1.2.2 建立索引的缺點
雖然索引的建立在提高檢索效率方面具有諸多積極的作用,但還是存在下列缺點:
(1)在數據庫建立過程中,需花費較多的時間去建立并維護索引,特別是隨著數據總量的增加,所花費的時間將不斷遞增。
(2)在數據庫中創建的索引需要占用一定的物理存儲空間,這其中就包括數據表所占的數據空間以及所創建的每一個索引所占用的物理空間,如果有必要建立起聚簇索引,所占用的空間還將進一步的增加。
(3)在對表中的數據進行修改時,例如對其進行增加、刪除或者是修改操作時,索引還需要進行動態的維護,這給數據庫的維護速度帶來了一定的麻煩。
在數據庫結構之中,索引的形式可以簡單的理解為是表中數據與相應存儲位置相對應的一個列表,它的主要目的在于減少數據庫管理系統搜索數據的時間。從數據的搜索方式來講也可以說是在盡可能確保搜索用戶獲取所需信息的前提下,最大限度地減少對數據庫掃描的區域,以最短的時間從數據庫中獲取有用的數據。
從索引的結構來講,可以將索引分為惟一性索引及復合性索引兩類。其中,惟一性索引是指全部索引列中各個索引所指向的所有數據具有惟一性,這樣可以保證數據不含冗余信息,檢索效率高;而復合性索引是指單個索引創建于兩個/列或多個/列之上。在檢索時,當需要兩個/或者多個/列作為搜索的關鍵詞時,最好的方法就是在相關的列上設置復合性索引。
從數據庫的相關實際設計經驗來看,本人認為只要保證索引內容與結構的簡潔性與準確性,只需要設置惟一性索引即可,這樣可以有效的保證數據庫操作的效率。
例如,在對某機械設計研究院的數據庫管理系統進行設計時,用戶要求能在同一個數據庫之中,在同一個檢索過程當中,能夠保證實現以“機械設計”、“機械制圖”及“機械制造”為索引進行信息的檢索、增加與修改。具體的要求是以“機械設計”為主,“機械制圖”及“機械制造”為輔。在設計之初,作者采用慣常的復合索引方式,在數據庫中將“機械設計”作為主索引,而“機械制圖”與“機械制造”作為輔助索引。這種設置方式在數據量相對較小的前期數據庫中能正常的使用,對數據庫信息檢索不存在過大的影響。
但是當數據庫運行一段時間之后,數據庫中的數據增加,使用者在對數據庫進行操作時開始有明顯的遲鈍感。尤其是在執行相關的數據庫編輯操作時,甚至出現了10 s左右的延遲,在對數據進行添加與修改時,延遲現象更加明顯。在后一階段,取消先前的復合索引設置方案,采用于數據庫中增加一個專門的數列的方式,將“機械設計”、“機械制圖”和“機械制造”三項內容直接進行合并,將此項內容作為惟一的索引。修改之后,在對數據庫進行操作時基本上消除了延遲的現象。
但是,隨著使用時間的持續增加,數據庫的容量增大,在進行信息檢索的時候同樣開始出現6 s左右的延遲現象。但究其主要原因還是由于數據庫所占用的存儲空間的增長速度過快所導致的。也就是說,主要原因并不是索引的設置方式上,而是在于索引的內容之上。由于該單位的“機械設計”的字符長度設定為16 Byte,而“機械制圖”字符串所預留的字符長度為20 Byte,“機械制造”所預留的字符串長度為30 Byte,這樣算來,整個索引的字符長度及達到了66 Byte。這才是導致數據庫占用存儲空間的增長速度過快的根本原因。因此,可以通過對索引內容的結構進行一定的改造,在同樣的軟硬件條件下能更加高效地實現數據的檢索。
下面主要從復合索引方式對索引在數據庫檢索中的應用進行論述。
對于多條件的查詢而言,通常是考慮采用建立多關鍵字的復合索引方式,例如下面得檢索:select*from table where col1=A and col2=B and col3=C;
根據where之后的查詢條件,可以建立下面的復合索引create index idx1 on table 1(col1 col2 col3)。
同時,也可以針對col1,col2以及col3建立其單列索引,這種方式雖然能有效的提高結構的惟一性,但是當整體數據量增加時,其效果就不如復合索引。上面的復合索引就相當于分別建立起如下的單個關鍵字索引:

檢索系統中一般都采用“最左前綴”的結果,也就是說系統是從整個條件查詢的最左端開始的,它并不是說只要包含這樣三列的查詢語句,就都能夠用到上面的復合索引,例如下面的語句就用不到:

建立索引是提高數據庫查詢效率的一個有效方式,正確地使用并設置索引能有效地提高信息的查詢效率。同時,冗余的索引將會浪費數據存儲空間,給搜索性能帶來負面影響。基于這個原因,在設計數據庫查詢程序時,應該在索引使用的基本原則下兼顧索引的效率和成本,對索引加以合理的使用。
[1]徐從旭.索引在數據庫查詢中的應用[J].銅陵學院學報,2008,7(3):66-67.
[2]郭偉斌,陳東文.數據庫索引技術的研究與應用[J].電腦開發與應用,2007,20(9):12-14.
[3]鄧體俊.數據庫索引技術的應用[J].電腦知識與技術,2010(36):30-32.