Oracle Index-organized table (IOT)概述
一、幾種表型別
Type |
Description |
Ordinary(heap-organized) table |
Data is stored as an unordered collection (heap). |
Partitioned table |
Data is divided into smaller, more manageable pieces. |
Index-organized table (IOT) |
Data (including no-key values) is sorted an stored in a B-tree index structure. |
Clustered table |
Related data from more than one table are stored together. |
二、heap-organized table 和 Index-organized table對比
不同於heap-organized table,資料以無序堆形式儲存,IOT中的資料按主鍵排序的方式儲存在B-tree索引結構中。除了儲存主鍵列值之外,IOT的B-tree的每個索引條目還儲存非鍵列值(non-key column)。
Index-organized table具備完整的表功能。它們支援各種功能,如:約束條件、觸發器、LOG和object columns,分割槽、並行操作、聯機重組以及複製。甚至可以對索引組織的表建立索引。
索引組織表與普通表只是在屋裡組織結構上有差別。邏輯上,其處理方式與普通表相同。可以像指定常規表那樣,在INSERT、SELECT、DELETE和UPDATE語句中指定按索引組織的表。
Index-organized table非常適合OLTP應用程式。這類應用程式要求基於primary key實現快速訪問和高可用性。在聯機訂單處理中,對訂單表執行的查詢和DML操作主要就是基於主鍵,而大量的DML操作會產生碎片,因而需要頻繁的進行重組。由於IOT可以聯機重組,並且不會使其二級索引失敗,因此可以極大地縮短甚至消除不可用的時間段。
與堆表相比,IOT:可以基於主鍵更快地訪問表資料
不會複製主鍵值的儲存區
要求的儲存空間更少
使用二級索引和邏輯ROW ID
可用性更高,因為表重組時不會使二級索引失效
IOT有一下限制:必須有一個不是DEFERRABLE的主鍵
不能聚簇
不能使用組合分割槽
不能包含型別為ROWID或LONG的列
Index-organized table沒有物理ROWID,而是使用邏輯row ID。邏輯row ID為Index-organized table提供更快的訪問,通過使用一下兩種方法:
l A physical guess whose access time is equal to that of physical row IDs.(物理推測法,其訪問時間相當於對物理ROWID的訪問時間)
l Access without the guess (or after an incorrect guess); this performs a primary key access of the IOT.(不推測或在推測錯誤後訪問,這將對IOT執行主鍵訪問)
推測的基礎是對行所在的檔案和塊的瞭解。如果建立了索引,則塊資訊比較準確,但如果葉塊發生了拆分,則該資訊會改變。如果推測錯誤,且該行已不在指定的塊中,則將使用邏輯ROW ID條目的剩餘部分(即主鍵)來獲取該行。
Oracle使用基於表主鍵的邏輯ROW ID來對Index-organized table編制二級索引。由於IOT中的行沒有永久性實體地址,因此當行轉移到新塊中後,物理推測也會失效。此時,要獲取新的推測,可以重建二級索引。
三、建立Index-organized table
create table indexTable
( ID varchar2(10),
Name varchar2(20),
constraint pk_id primary key(ID)
)
organization index
tablespace index
PCTTHRESHOLD 20
OVERFLOW TABLESPACE users
INCLUDING name;
1、 建立IOT時,必須設定主鍵,否則報錯。
2、 索引組織表實際上將所有資料都放入了索引中。
3、 OVERFLOW子句(行溢位),因為所有資料都放入索引,所以當表的資料量很大時,會降低索引組織表的查詢效能。此時設定溢位段將主鍵和溢位資料分開來儲存以提高效率。溢位段的設定有兩種格式:
PCTTHRESHOLD n:指定一個資料塊的百分比,當行資料佔用大小超出時,該行的其他列資料放入溢位段。
INCLUDING column_name:指定列之前的列都放入索引塊,之後的列都放到溢位段。
如上所示,name之後的列必然被放入溢位列,而其他列根據PCTTHRESHOLD規則。
4、 compress子句(鍵壓縮)。與普通的索引一樣,索引組織表也可以使用compress子句進行鍵壓縮以消除重複值。具體的操作是,在organization index之後加上COMPRESS n子句。
n的意義在於:指定壓縮的列數。預設為無窮大。例如:對於資料(1,2,3)、(1,2,4)、(1,2,5)、(1,3,4)、(1,3,5),若使用COMPRESS,則會將重複出現的(1,2)、(1,3)進行壓縮;若使用COMPRESS 1時,只對資料(1)進行壓縮
5、 索引組織表的主鍵不能被刪除、禁用或延遲。
四、在Index-organized table上建立Bitmap索引
Oracle supports bitmap indexes on partitioned and nonpartitioned index-organized tables. A mapping table is required for creating bitmap indexes on an index-organized table.
--可以再Index-organized table上建立bitmap索引,但是需要建立mapping table。
The mapping table is a heap-organized table that stores logical rowids of the index-organized table. Specifically, each mapping table row stores one logical rowid for the corresponding index-organized table row. Thus, the mapping table provides one-to-one mapping between logical rowids of the index-organized table rows and physical rowids of the mapping table rows.
--mapping table是heap-organized table,mapping table儲存Index-organized table的邏輯ROW ID。特別的,每一個mapping table行儲存一個相應IOT 行的邏輯ROW ID。這樣,mapping table就提供了一對一的mapping,在IOT的邏輯ROW ID和mapping table的物理ROWID之間。
A bitmap index on an index-organized table is similar to that on a heap-organized table except that the rowids used in the bitmap index on an index-organized table are those of the mapping table as opposed to the base table. There is one mapping table for each index-organized table and it is used by all the bitmap indexes created on that index-organized table.
--IOT上的bitmap索引的ROWID是mapping table的,而不是base table的。
一個mapping table對應於一個IOT,IOT上所有的bitmap index都用這一個mapping table。
In both heap-organized and index-organized base tables, a bitmap index is accessed using a search key. If the key is found, the bitmap entry is converted to a physical rowid. In the case of heap-organized tables, this physical rowid is then used to access the base table. However, in the case of index-organized tables, the physical rowid is then used to access the mapping table. The access to the mapping table yields a logical rowid. This logical rowid is used to access the index-organized table.
--在heap-organized table和IOT上,bitmap都是通過鍵值訪問,當一個鍵值被發現時,bitmap條目就轉換為一個物理ROWID。在heap-organized table的情況下,這一物理ROWID被用來訪問基表。然而,在IOT的情況下,物理ROWID被用來訪問mapping table,通過對mapping table的訪問,產生出一個邏輯ROW ID,這個邏輯ROW ID被用來訪問IOT。
Though a bitmap index on an index-organized table does not store logical rowids, it is still logical in nature.
Movement of rows in an index-organized table does not leave the bitmap indexes built on that index-organized table unusable. Movement of rows in the index-organized table does invalidate the physical guess in some of the mapping table's logical rowid entries. However, the index-organized table can still be accessed using the primary key.
--IOT上的行移動不會導致其上的bitmap 索引失效。
--IOT上的行移動會使mapping table上的邏輯ROW ID條目的物理推測失效。然而,IOT依然可以通過主鍵來訪問。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25744374/viewspace-731398/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle-tom-table-iotOracle
- 簡述Oracle IOT(Index Organized Table)(上)OracleIndexZed
- 簡述Oracle IOT(Index Organized Table)(下)OracleIndexZed
- 簡述Oracle IOT(Index Organized Table)(中)OracleIndexZed
- index table (IOT)Index
- Index-Organized Table Applications (236)IndexZedAPP
- HTML <table>表格概述HTML
- 索引組織表(index organized table ,IOT)索引IndexZed
- oracle TSPITR with IOTOracle
- oracle IOT表學習Oracle
- [Oracle] Partition table exchange Heap tableOracle
- Oracle 索引組織表(IOT)Oracle索引
- Oracle 19c Concepts(03):Indexes and Index-Organized TablesOracleIndexZed
- ORACLE索引概述Oracle索引
- Oracle Scheduler概述Oracle
- oracle temporary tableOracle
- oracle shrink tableOracle
- Oracle Table LocksOracle
- Alter table for ORACLEOracle
- Oracle Table FunctionOracleFunction
- oracle iot索引組織表(一)Oracle索引
- oracle iot索引組織表(二)Oracle索引
- Oracle 普通table 轉換為partition tableOracle
- 4.1.1 Oracle Restart概述OracleREST
- oracle之hint概述Oracle
- ORACLE SQL概述(1)OracleSQL
- Oracle Resource Manager概述Oracle
- oracle cache table(轉)Oracle
- Oracle table selectOracle
- Oracle:TABLE MONITORINGOracle
- oracle之nalyze tableOracle
- Oracle ASM Allocation TableOracleASM
- oracle cache table(1)Oracle
- oracle cache table(3)Oracle
- oracle cache table(2)Oracle
- oracle cache table(5)Oracle
- oracle cache table(4)Oracle
- oracle cache table(6)Oracle