ORACLE索引表學習

2021-08-25 09:19:35 字數 2758 閱讀 4876

索引表與標準表的差異

一、索引表中的rowid列存放的是【邏輯】實體地址。而標準表的rowid偽列中儲存的則是真實的實體地址,這是兩者之間最本質的區別。另外其他幾個方面的差異都是因為有這個差異存在而存在。或者說,它是索引表優勢的根源。
二、索引表對記錄的訪問是基於主鍵的,也就是說,根據邏輯的rowid。而標準表在訪問記錄的時候,則是通過物理的rowid位址。
三、表的掃瞄方式不同。若採用索引表的話,則資料庫是通過全索引掃瞄方式訪問相關的記錄;而若採用標準表的話,則是通過順序掃瞄的方式訪問相關的記錄。這兩者訪問方式在效能上有很大的差異。全索引掃瞄方式,可能提供更高的查詢效能。
四、對於主鍵的要求不同。在建立標準表的時候,不一定要指定主鍵。但是,若使用者在建立索引表的時候,則必須給表建立主鍵,使用主鍵來唯一表示一行記錄。很簡單,在索引表中,rowid偽列中就儲存著主鍵資訊。若不指定具體的主鍵的話,資料訪問時就不能夠對記錄進行定位。
索引表與標準表的差異只是停留在資料庫開發的層面,或者說,只是內部儲存結構上有一定的差異。但是,在使用者使用它們的時候,沒有任何的差異。在前台應用程式設計的時候,使用者可以向普通表那樣訪問索引表。這就給索引表的應用排除了使用上的障礙。

索引表的優勢

索引表的優勢主要體現在資料查詢上。而且,這個優勢是非常明顯的。

一是索引表能夠獲得比標準表更快的查詢速度,即使這張標準表已經建立了合適的索引。這跟索引表的儲存結構是分不開的。因為索引表的資料在儲存的時候,所有的行記錄都是跟排序過的主鍵列一起儲存在資料庫系統中。故在查詢的時候,只需要找到主鍵,就俄可以記錄查詢到整條記錄的資訊。而標準表在資料查詢的時候,需要先找到對應的rowid列,然後再去查詢主鍵資訊,再去查詢對應的記錄。所以,索引表減少了資料查詢過程中的中間環節,避免了額外的資料塊讀取操作。

二是索引表中的記錄,是按照主鍵列進行排序儲存的。對於主鍵列範圍內的查詢,使用者可以獲得更快的查詢速度。這主要是因為在**的rowid偽列中,直接儲存了主鍵資訊。

三是利用溢位儲存功能,提高常用列的訪問速度。在後台資料庫表中,可能有幾十個字段。但是,前台使用者在查詢的時候,往往不需要訪問所有的字段。那些使用者經常要訪問的列,就叫做常用列。對常用列與不常用列區別明顯的,可以通過溢位儲存功能,提高常用列的訪問速度。即將表中不經常需要訪問的非主鍵列不儲存在b樹的葉子節點中,而是儲存在乙個具有堆組織方式的溢位儲存區中。若索引表比較大,使用溢位儲存不但可以減少索引表所占用的儲存空間,而且可以提高常用列的查詢效率。當然,這只是針對常用列而言。若使用者查詢非常用列時,溢位儲存就沒有效果了。

索引表的使用時機

1、 通過關鍵字查詢表的內容。

如果在實際應用中,大部分是通過主鍵列來查詢其他列的資訊的時候,就可以考慮把這張表建立為索引表。

如在erp系統中,有銷售訂單表、採購訂單表等等。對於這些表單,使用者查詢的時候,大部分是按照訂單單號來進行查詢。此時,資料庫管理員在設計的時候,就可以把這些單據的基礎**設定為索引表。

特別是有些系統把單據分為單頭檔與單身檔。如採購訂單單頭與採購訂單單身。在前台顯示為兩個不同的頁籤,在後台對應兩張不同的資料表。利用單頭頁簽來呼叫單身的內容。此時,就是通過乙個採購訂單單頭的id列來查詢單身的內容。在這種設計的時候,完全可以把訂單單身對應的資料庫表設定為「索引表」。從而提高資料查詢的速度。

2、 若表變化頻繁,則不適宜使用索引表。

若表的變更比較頻繁的話,則採用索引表不怎麼合適。這主要是因為oracle資料庫在對索引表管理時,開銷比較大。如對於員工考勤系統中,員工資訊這個表變更不是很頻繁,但是,員工考勤資訊表中的資料,則每個小時都可能會發生變化。

對於變換這麼頻繁的**,建立索引表就不怎麼合適。此時,我們需要為其建立基本表,然後在基本表上建立索引。這雖然查詢效果沒有索引表那麼好,但是,卻可以大大減少oracle資料庫的開銷。所謂,有得必有失。資料庫管理員有時候還必須在這個得失之間尋求乙個平衡。以期資料庫整體效能的最優化。

3、 靈活利用溢位儲存功能。

普通b樹索引條目一般比較小,因為在每個索引條目中僅儲存索引列的值與rowid的值。但是,因為索引表中的每個索引條目都包有整條地記錄,所以,索引表中的索引條目就可能會很大。為此,使用者若在索引表中查詢資料,其查詢的只是其中一部分字段內容的話,索引表的效果就體現不出來。相反,若表中的字段比較多的話,則效果會適得其反。為此,在oracle資料庫中,採用了溢位儲存功能來應對索引表的這個缺陷。

如在一張員工基本資訊表中,他有員工姓名、員工編號、員工出身年月、身份證號碼、住址、戶口、民族等資訊,長達幾十個字段。但是,在平時的時候,我們基本上只需要查詢員工的姓名、編號、身份證號碼即可。而不需要其他的資訊。

此時,當員工比較多的時候,就需要把這張表轉換成索引表,然後採用溢位管理功能,來提高員工資訊常用字段的查詢速度。把使用者經常需要用到的員工姓名、編號、身份證號碼等字段儲存在葉子節點上。而把其他不常用的字段採取「溢位儲存」策略。

四、索引表的建立與使用

在介紹索引表與基本表的差異時,筆者已經說過,兩者的差異主要體現在儲存結構上。故對於使用者使用是沒有多大影響的。

在索引表的建立上,可以參考相關的書籍。筆者在這裡只是要強調,在索引表建立過程中的幾個關鍵點。

一是在索引表中,不能對非主鍵建立索引,。這是索引表建立的乙個限制條件,資料庫管理人員必須無條件的遵守。二是必須給索引表建立主鍵。有些資料庫管理員有個習慣,在建立表的時候,一開始不設定主鍵。等到表維護的時候,再確定某個字段作為主鍵。但是,在索引表建立的時候,一開始就要指定表的主鍵,否則的話,會有錯誤產生。這也是資料庫管理人員需要注意的。

Oracle 索引學習

索引的建立語句 單列索引 create index 索引名 on 表名 列名 多列索引 create index 索引名 on 表名 列名1,列名2.刪除索引 drop index 索引名檢視某個表中的所有的索引 select from all indexs where table name 表名 ...

Oracle表增加索引

oracle表加索引 加快資料查詢的利器 索引是對錶中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。通俗一點地講,索引對資料庫中的表而言就相當於一本書的目錄。1.普通索引,僅加速查詢 2.全文索引,用來對大表的文字域 char,varchar,text 進行索引。對文字的...

oracle 索引與索引表管理

一 索引的概念 索引是一種與表或簇相關的資料庫物件,能夠為資料的查詢提供快捷的訪問路徑,減少磁碟i o,提高檢索效率。索引由索引值及記錄相應實體地址的rowid兩個部分構成,並按照索引值有序排列,rowid可以快速定位到資料庫表符合條件的記錄。可以這樣理解,將索引看作是一本書的目錄,索引值即為目錄的...