在索引表的rowid中儲存的病不是記錄的實際實體地址,而是邏輯的實體地址。故有些資料庫管理員把索引表中的rowid列稱為rowid偽主鍵列,他存放的是表的主鍵資訊。
一、索引表與標準表的差異
索引表與標準表的差異主要體現在四個方面。
一是索引表中的rowid列存放的時主鍵資訊,使邏輯的實體地址。而在標準表的rowid偽列中則儲存的是真實的實體地址。這是兩者之間最本質的區別。另外其他三個方面的差異都是因為有這個差異存在而存在。也可以說,他是索引表優勢的根源。
二是索引表對記錄的訪問是基於主鍵的,也就是說,根據邏輯的rowid.而標準表在訪問記錄的時候,則是通過物理的rowid位址。
三是表的掃瞄方式不同。若採用索引表的話,則資料庫是通過全索引掃瞄方式反問相關的記錄;而若採用標準表的話,則是通過順序掃瞄的方式返回相關的記錄。這兩者訪問方式在效能上有很大的差異。全索引掃瞄方式,可能提供更高的查詢效能。
四是對於主鍵的要求不同。在建立標準表的時候,不一定要指定主鍵。但是,若使用者在建立索引表的時候,則必須給表建立主鍵,使用主鍵來唯一表示一行記錄。很簡單,在索引表中,rowid偽列中就儲存著主鍵資訊。若不指定具體的主鍵的話,資料訪問時就不能夠對記錄進行定位。
不過,索引表與標準表的差異只是停留在資料庫開發的層面,或者說,只是內部儲存結構上有一定的差異。但是,在使用者使用它們的時候,沒有任何的差異。在前台應用程式設計的時候,使用者可以向普通表那樣訪問索引表。這就給索引表的應用排除了使用上的障礙。
二、索引表的優勢
索引表的優勢主要體現在資料查詢上。而且,這個優勢是非常明顯的。
一是索引表能夠獲得比標準表更快的查詢速度,即使這張標準表已經建立了合適的索引。這跟索引表的儲存結構是分不開的。因為索引表的資料在儲存的時候,所有的行記錄都是跟排序過的主鍵列一起儲存在資料庫系統中。故在查詢的時候,只需要找到主鍵,就俄可以記錄查詢到整條記錄的資訊。而標準表在資料查詢的時候,需要先找到對應的rowid列,然後再去查詢主鍵資訊,再去查詢對應的記錄。所以,索引表減少了資料查詢過程中的中間環節,避免了額外的資料塊讀取操作。
二是索引表中的記錄,是按照主鍵列進行排序儲存的。對於主鍵列範圍內的查詢,使用者可以獲得更快的查詢速度。這主要是因為在**的rowid偽列中,直接儲存了主鍵資訊。
三是利用溢位儲存功能,提高常用列的訪問速度。在後台資料庫表中,可能有幾十個字段。但是,前台使用者在查詢的時候,往往不需要訪問所有的字段。那些使用者經常要訪問的列,就叫做常用列。對常用列與不常用列區別明顯的,可以通過溢位儲存功能,提高常用列的訪問速度。即將表中不經常需要訪問的非主鍵列不儲存在b樹的葉子節點中,而是儲存在乙個具有堆組織方式的溢位儲存區中。若索引表比較大,使用溢位儲存不但可以減少索引表所占用的儲存空間,而且可以提高常用列的查詢效率。當然,這只是針對常用列而言。若使用者查詢非常用列時,溢位儲存就沒有效果了。
三、索引表的使用時機
1、 通過關鍵字查詢表的內容。
如果在實際應用中,大部分是通過主鍵列來查詢其他列的資訊的時候,就可以考慮把這張表建立為索引表。
如在erp系統中,有銷售訂單表、採購訂單表等等。對於這些表單,使用者查詢的時候,大部分是按照訂單單號來進行查詢。此時,資料庫管理員在設計的時候,就可以把這些單據的基礎**設定為索引表。
特別是有些系統把單據分為單頭檔與單身檔。如採購訂單單頭與採購訂單單身。在前台顯示為兩個不同的頁籤,在後台對應兩張不同的資料表。利用單頭頁簽來呼叫單身的內容。此時,就是通過乙個採購訂單單頭的id列來查詢單身的內容。在這種設計的時候,完全可以把訂單單身對應的資料庫表設定為「索引表」。從而提高資料查詢的速度。
2、 若表變化頻繁,則不適宜使用索引表。
若表的變更比較頻繁的話,則採用索引表不怎麼合適。這主要是因為oracle資料庫在對索引表管理時,開銷比較大。如對於員工考勤系統中,員工資訊這個表變更不是很頻繁,但是,員工考勤資訊表中的資料,則每個小時都可能會發生變化。
對於變換這麼頻繁的**,建立索引表就不怎麼合適。此時,我們需要為其建立基本表,然後在基本表上建立索引。這雖然查詢效果沒有索引表那麼好,但是,卻可以大大減少oracle資料庫的開銷。所謂,有得必有失。資料庫管理員有時候還必須在這個得失之間尋求乙個平衡。以期資料庫整體效能的最優化。
3、 靈活利用溢位儲存功能。
普通b樹索引條目一般比較小,因為在每個索引條目中僅儲存索引列的值與rowid的值。但是,因為索引表中的每個索引條目都包有整條地記錄,所以,索引表中的索引條目就可能會很大。為此,使用者若在索引表中查詢資料,其查詢的只是其中一部分字段內容的話,索引表的效果就體現不出來。相反,若表中的字段比較多的話,則效果會適得其反。為此,在oracle資料庫中,採用了溢位儲存功能來應對索引表的這個缺陷。
如在一張員工基本資訊表中,他有員工姓名、員工編號、員工出身年月、身份證號碼、住址、戶口、民族等資訊,長達幾十個字段。但是,在平時的時候,我們基本上只需要查詢員工的姓名、編號、身份證號碼即可。而不需要其他的資訊。
此時,當員工比較多的時候,就需要把這張表轉換成索引表,然後採用溢位管理功能,來提高員工資訊常用字段的查詢速度。把使用者經常需要用到的員工姓名、編號、身份證號碼等字段儲存在葉子節點上。而把其他不常用的字段採取「溢位儲存」策略。
四、索引表的建立與使用
在介紹索引表與基本表的差異時,筆者已經說過,兩者的差異主要體現在儲存結構上。故對於使用者使用是沒有多大影響的。
在索引表的建立上,可以參考相關的書籍。筆者在這裡只是要強調,在索引表建立過程中的幾個關鍵點。
一是在索引表中,不能對非主鍵建立索引,。這是索引表建立的乙個限制條件,資料庫管理人員必須無條件的遵守。二是必須給索引表建立主鍵。有些資料庫管理員有個習慣,在建立表的時候,一開始不設定主鍵。等到表維護的時候,再確定某個字段作為主鍵。但是,在索引表建立的時候,一開始就要指定表的主鍵,否則的話,會有錯誤產生。這也是資料庫管理人員需要注意的。
Oracle 資料庫中的索引
在oracle資料庫中的資料,每一行都是用rowid來標識的,rowid能夠標識資料庫中的某一行的具體位置,在資料庫中存有大量資料時,要能找找到具體的某乙個資料 rowid 這個時候就需要索引物件。1 索引的工作原理 在乙個擁有大量資料的表中進行查詢時,如果沒有建立索引,肯定會全表查詢,然後再將查詢...
Oracle資料庫索引
標籤 資料庫 oracle 索引index 2013 06 14 16 54 4148人閱讀收藏 舉報 database 6 目錄 索引基本概念 索引的作用 索引的架構 oracle索引的型別 1 基於函式的索引 2 位圖索引 oracle索引的實現 索引是用於加速資料訪問的資料物件,合理的使用索引...
Oracle資料庫 索引
索引通過指標的形式提高資料查詢的速度。如果乙個資料量比較大的資料庫經常被查詢而插入刪除的次數較少,則應該建立索引,相反,小表或經常被插入或修改,則不建議建立索引。1.建立索引 create index emp phone number ix on employees phone number 2.建...