摘要:數據庫應用中最重要的操作是什么?答案無疑是數據檢索。毫不夸張的說,數據庫運行過程中百分之九十以上的操作都是與數據檢索息息相關的。而對于數據檢索來說,最重要的就是檢索的精度與速度。檢索的精度基本取決于編程人員的水平,而檢索的速度則受到多種因素的影響。其中,索引技術是數據庫管理系統中最常用的提高檢索速度的手段。
關鍵詞:數據檢索索引檢索速度
隨著數據庫技術的飛速發展和廣泛應用,各行各業都積極采用這一先進技術進行數據的管理與使用。在數據庫的諸多應用中,最常用和最重要的功能是什么?答案無疑是數據檢索。毫不夸張的說,數據庫在運行和使用的過程中,百分之九十以上的操作都與數據檢索息息相關,甚至有些數據庫創建的目的就是提供數據檢索。
在數據庫的運行過程中,數據檢索是最頻繁的操作。此外,例如數據的修改、數據的刪除都要建立在數據的檢索基礎上。再比如數據庫系統中視圖的實施、存儲過程的設計等數據庫對象的管理,其核心內容也是數據的檢索。
數據檢索過程中最重要的就是檢索的精度與速度。要求盡可能在最短的時間內準確的找到目標數據。檢索的精度基本依靠于編程人員自身的水平,而檢索的速度則受到多方面因素的影響。其中,索引技術是數據庫管理系統中最常用的提高檢索速度的手段。
1 索引概述
索引是對數據庫表中一列或多列的值進行排序的一種結構,它就好比一本書的目錄,可以大大提高用戶檢索數據的速度。索引是作為一個單獨的文件存儲在數據庫中的,與其依附的基本表分開存儲。引入索引的主要目的就是提高檢索數據的速度。一個數據庫中是否建有索引、索引機制設計的是否合理,對數據庫檢索速度的影響是巨大的。
2 索引分類
根據索引自身結構的特征,可以將索引分為:普通索引、唯一索引、主鍵索引和聚集索引。
2.1 普通索引:普通索引沒有特殊的結構特點,索引中每個鍵值項都有指向包含該鍵值的數據行的指針。
2.2 唯一索引:與普通索引不同,唯一索引中不允許任何兩行具有相同索引值。
2.3 主鍵索引:嚴格來講,主鍵索引并不是一種索引類型,而是索引的一種特殊應用。創建主鍵時,數據庫引擎會自動創建唯一的索引來強制實施PRIMARY KEY約束的唯一性要求。如果這個表之前沒有聚集索引,同時建立主鍵時候沒有強制指定使用非聚集索引,則建立主鍵時候,同時建立一個唯一的聚集索引。
2.4 聚集索引:一種特殊索引,索引中鍵值的邏輯順序決定了表中相應行的物理存儲順序。每個表只能有一個聚集索引,因為表和視圖中的數據行本身只能按一個順序排序。
上述類別并不是嚴格區分的,例如主鍵索引同時也可能是聚集索引,聚集索引也可能是唯一索引。
3 索引原理
索引的主要功能是提高檢索速度,那么它是如何實現這一功能的呢?這里引入一個現實中與數據檢索過程類似的工作——下發作業本,來對無索引、普通索引和聚集索引對于數據檢索的影響加以說明。
3.1 沒有索引
假設在一個班級中,老師要下發學生的作業本(相當于檢索數據,下發作業所用路線越長,意味著檢索時間越長)。學生的座位是隨機安排的(數據是無序的存儲在硬盤中),只是在座位上標有學生的學號。教師手中沒有學生的座位表(沒有引入索引),下發作業只能逐個查看學生座位上的學號,直到找到目標學生。假設學生目前實際的座位情況如圖1所示,現在要發放學號為1、4和13三名同學的作業。
首先發放1號學生的作業,因為座號無序,教師手中也沒有座位表,所以教師只能逐個座位去查看座位上的學號是否為1號,直到找到1號學生為止,路線如圖2示。
接下來發放4號同學的作業,與發放1號作業相同,教師需要從頭逐個查看,路線如圖3中■線路所示。同樣,發放13號作業時也要返回起點后再逐個查看。可見,這樣的方案效率是十分低的。
3.2 普通索引
當一個基本表引入普通索引的時候,就如同教師手中有了座位表一樣,發放作業時可以直接找到該學生座位,這樣發放作業的路線就變得簡單很多,如圖4所示。
通過圖4和圖2的比較,可以看出第二種方法發3本作業的路線比第一種方法發1本作業的路線還短,效率大大提高。但是同時也可以看出,這種路線也存在折返與重復的情況存在,即不是最佳方案。
3.3 聚集索引
聚集索引會將數據按照邏輯順序重新排列,就如同教師不僅擁有座位表,而且學生的座位也是按照學號有序排列的,這使發放的路程更加簡單,如圖5所示。
從圖5中可以看出,該方案沒有折返和重復的路線,基本上是最優的發放方法。所以從上述三種方法可以看出,無索引,普通索引和聚集索引對于檢索的影響有多么明顯。如果將這種影響放大到存放成千上萬數據的數據庫中,結果可想而知。
4 使用索引的注意事項
雖然索引可以加快數據檢索的速度,但是一定要避免盲目創建索引,原因主要有兩點。
4.1 索引文件創建后,單獨形成一個文件存放索引鍵值和指針,創建索引的表中數據越多,相應的索引文件也越大。如果盲目建立過多的索引,會占用系統很多的介質資源。
4.2 索引的維護由系統自動完成,當基本表的數據增加、刪除或修改時,索引文件要隨之變化,以保持與基本表一致。所以,索引越多,系統的負擔越重。盲目創建索引勢必給系統帶來不必要的負擔。
總而言之,要想使數據庫在運行的過程中提高效率,索引是不可忽視的重要技術手段。如果想要索引更好的發揮作用,就必須掌握其工作原理,避免該用不用,不該用亂用的情況出現。
參考文獻:
[1]張舒.超大型Oracle數據庫的基礎設計和優化設計.價值工程.2011-04.
[2]趙云峰,甘建.數據庫的查詢優化方法分析.中小企業管理與科技.2010-02.
[3]金喜波,楊明遠,刁樹民,張曉勇.在數據庫系統中應用索引重建技術.中小企業管理與科技.
作者簡介:董海軍,(1977-)男,河北唐山人,遼寧機電職業技術學院信息系講師,計算機技術應用研究室主任,研究方向為計算機軟件開發與應用。