索引表與標準表的差異
一、索引表中的rowid列存放的是【邏輯】實體地址。而標準表的rowid偽列中儲存的則是真實的實體地址,這是兩者之間最本質的區別。另外其他幾個方面的差異都是因為有這個差異存在而存在。或者說,它是索引表優勢的根源。
二、索引表對記錄的訪問是基於主鍵的,也就是說,根據邏輯的rowid。而標準表在訪問記錄的時候,則是通過物理的rowid位址。
三、表的掃瞄方式不同。若採用索引表的話,則資料庫是通過全索引掃瞄方式訪問相關的記錄;而若採用標準表的話,則是通過順序掃瞄的方式訪問相關的記錄。這兩者訪問方式在效能上有很大的差異。全索引掃瞄方式,可能提供更高的查詢效能。
四、對於主鍵的要求不同。在建立標準表的時候,不一定要指定主鍵。但是,若使用者在建立索引表的時候,則必須給表建立主鍵,使用主鍵來唯一表示一行記錄。很簡單,在索引表中,rowid偽列中就儲存著主鍵資訊。若不指定具體的主鍵的話,資料訪問時就不能夠對記錄進行定位。
索引表與標準表的差異只是停留在資料庫開發的層面,或者說,只是內部儲存結構上有一定的差異。但是,在使用者使用它們的時候,沒有任何的差異。在前台應用程式設計的時候,使用者可以向普通表那樣訪問索引表。這就給索引表的應用排除了使用上的障礙。
索引表的優勢
索引表的優勢主要體現在資料查詢上。而且,這個優勢是非常明顯的。
一是索引表能夠獲得比標準表更快的查詢速度,即使這張標準表已經建立了合適的索引。這跟索引表的儲存結構是分不開的。因為索引表的資料在儲存的時候,所有的行記錄都是跟排序過的主鍵列一起儲存在資料庫系統中。故在查詢的時候,只需要找到主鍵,就俄可以記錄查詢到整條記錄的資訊。而標準表在資料查詢的時候,需要先找到對應的rowid列,然後再去查詢主鍵資訊,再去查詢對應的記錄。所以,索引表減少了資料查詢過程中的中間環節,避免了額外的資料塊讀取操作。
二是索引表中的記錄,是按照主鍵列進行排序儲存的。對於主鍵列範圍內的查詢,使用者可以獲得更快的查詢速度。這主要是因為在**的rowid偽列中,直接儲存了主鍵資訊。
三是利用溢位儲存功能,提高常用列的訪問速度。在後台資料庫表中,可能有幾十個字段。但是,前台使用者在查詢的時候,往往不需要訪問所有的字段。那些使用者經常要訪問的列,就叫做常用列。對常用列與不常用列區別明顯的,可以通過溢位儲存功能,提高常用列的訪問速度。即將表中不經常需要訪問的非主鍵列不儲存在b樹的葉子節點中,而是儲存在乙個具有堆組織方式的溢位儲存區中。若索引表比較大,使用溢位儲存不但可以減少索引表所占用的儲存空間,而且可以提高常用列的查詢效率。當然,這只是針對常用列而言。若使用者查詢非常用列時,溢位儲存就沒有效果了。
索引表的使用時機
1、 通過關鍵字查詢表的內容。
如果在實際應用中,大部分是通過主鍵列來查詢其他列的資訊的時候,就可以考慮把這張表建立為索引表。
如在erp系統中,有銷售訂單表、採購訂單表等等。對於這些表單,使用者查詢的時候,大部分是按照訂單單號來進行查詢。此時,資料庫管理員在設計的時候,就可以把這些單據的基礎**設定為索引表。
特別是有些系統把單據分為單頭檔與單身檔。如採購訂單單頭與採購訂單單身。在前台顯示為兩個不同的頁籤,在後台對應兩張不同的資料表。利用單頭頁簽來呼叫單身的內容。此時,就是通過乙個採購訂單單頭的id列來查詢單身的內容。在這種設計的時候,完全可以把訂單單身對應的資料庫表設定為「索引表」。從而提高資料查詢的速度。
2、 若表變化頻繁,則不適宜使用索引表。
若表的變更比較頻繁的話,則採用索引表不怎麼合適。這主要是因為oracle資料庫在對索引表管理時,開銷比較大。如對於員工考勤系統中,員工資訊這個表變更不是很頻繁,但是,員工考勤資訊表中的資料,則每個小時都可能會發生變化。
對於變換這麼頻繁的**,建立索引表就不怎麼合適。此時,我們需要為其建立基本表,然後在基本表上建立索引。這雖然查詢效果沒有索引表那麼好,但是,卻可以大大減少oracle資料庫的開銷。所謂,有得必有失。資料庫管理員有時候還必須在這個得失之間尋求乙個平衡。以期資料庫整體效能的最優化。
3、 靈活利用溢位儲存功能。
普通b樹索引條目一般比較小,因為在每個索引條目中僅儲存索引列的值與rowid的值。但是,因為索引表中的每個索引條目都包有整條地記錄,所以,索引表中的索引條目就可能會很大。為此,使用者若在索引表中查詢資料,其查詢的只是其中一部分字段內容的話,索引表的效果就體現不出來。相反,若表中的字段比較多的話,則效果會適得其反。為此,在oracle資料庫中,採用了溢位儲存功能來應對索引表的這個缺陷。
如在一張員工基本資訊表中,他有員工姓名、員工編號、員工出身年月、身份證號碼、住址、戶口、民族等資訊,長達幾十個字段。但是,在平時的時候,我們基本上只需要查詢員工的姓名、編號、身份證號碼即可。而不需要其他的資訊。
此時,當員工比較多的時候,就需要把這張表轉換成索引表,然後採用溢位管理功能,來提高員工資訊常用字段的查詢速度。把使用者經常需要用到的員工姓名、編號、身份證號碼等字段儲存在葉子節點上。而把其他不常用的字段採取「溢位儲存」策略。
四、索引表的建立與使用
在介紹索引表與基本表的差異時,筆者已經說過,兩者的差異主要體現在儲存結構上。故對於使用者使用是沒有多大影響的。
在索引表的建立上,可以參考相關的書籍。筆者在這裡只是要強調,在索引表建立過程中的幾個關鍵點。
一是在索引表中,不能對非主鍵建立索引,。這是索引表建立的乙個限制條件,資料庫管理人員必須無條件的遵守。二是必須給索引表建立主鍵。有些資料庫管理員有個習慣,在建立表的時候,一開始不設定主鍵。等到表維護的時候,再確定某個字段作為主鍵。但是,在索引表建立的時候,一開始就要指定表的主鍵,否則的話,會有錯誤產生。這也是資料庫管理人員需要注意的。
JDE 系統表(標準表)
完整表查詢 jde tables 1帳戶餘額表 f0902 19更改申請主檔案表 f5301 37到期日規則 表 f00142 2公司常量表 f0010 20租戶 租賃主檔案表 f1501 38到期日規則日期範圍 表 f00143 3日期財務格式表 f0008 21銷售單表頭檔案表 f4201 39...
ORACLE EBS常用標準表結構
begin inv object genealogy.getsource mmt.organization id,mmt.transaction source type id,mmt.transaction source id end 2 物料搬運單行檢視 mtl txn request lines...
供應商常用標準表
商常用標準表 商頭表 ap suppliers,商頭資訊如 商名稱 商編碼 稅號等,對應檢視 po vendors 商地點附加資訊表 pos supp prof ext b,商地點附加資訊 c ext attr1 15,d ext attr1 15 商聯絡人表 ap supplier contact...