索引組織表(index organized table, IOT)就是存儲在一個索引結構中的表。存儲在堆中的表是無組織的(也就是說,隻要有可用的空間,資料可以放在任何地方),IOT中的資料則按主鍵存儲和排序。對你的應用來說,IOT表和一個“正常”表并無二緻。
IOT有什麼意義呢?使用堆組織表時,我們必須為表和表主鍵上的索引分别留出空間。而IOT不存在主鍵的空間開銷,因為索引就是資料,資料就是索引,二者已經合二為一。
[@[email protected]]
但是,IOT帶來的好處并不止于節約了磁盤空間的占用,更重要的是大幅度降低了I/O,減少了通路緩沖區緩存(盡管從緩沖區緩存擷取資料比從硬碟讀要快得多,但緩沖區緩存并不免費,而且也絕對不是廉價的。每個緩沖區緩存擷取都需要緩沖區緩存的多個闩,而闩是串行化裝置,會限制應用的擴充能力)
IOT适用的場合有:
1、完全由主鍵組成的表。這樣的表如果采用堆組織表,則表本身完全是多餘的開銷,因為所有的資料全部同樣也儲存在索引裡,此時,堆表是沒用的。
2、代碼查找表。如果你隻會通過一個主鍵來通路一個表,這個表就非常适合實作為IOT.
3、如果你想保證資料存儲在某個位置上,或者希望資料以某種特定的順序實體存儲,IOT就是一種合适的結構。
IOT提供如下的好處:
·提高緩沖區緩存效率,因為給定查詢在緩存中需要的塊更少。
·減少緩沖區緩存通路,這會改善可擴縮性。
·擷取資料的工作總量更少,因為擷取資料更快。
·每個查詢完成的實體I/O更少。
如果經常在一個主鍵或唯一鍵上使用between查詢,也是如此。如果資料有序地實體存儲,就能提升這些查詢的性能。
heap table 就是一般的表,擷取表中的資料是按命中率來得到的。沒有明确的先後之分,在進行全表掃描的時候,并不是先插入的資料就先擷取。資料的存放也是随機的,當然根據可用空閑的空間來決定。
而iot 就是類似一個全是索引的表,表中的所有字段都放在索引上,是以就等于是約定了資料存放的時候是按照嚴格規定的,在資料插入以前其實就已經确定了其位置,是以不管插入的先後順序,它在那個實體上的那個位置與插入的先後順序無關。這樣在進行查詢的時候就可以少通路很多blocks,但是插入的時候,速度就比普通的表要慢一些。
适用于資訊檢索、空間和OLAP程式。索引組織表的适用情況:
1、 代碼查找表。
2、 經常通過主碼通路的表。
3、 建構自己的索引結構。
4、 加強資料的共同定位,要資料按特定順序實體存儲。
5、 經常用between…and…對主碼或唯一碼進行查詢。資料實體上分類查詢。如一張訂單表,按日期裝載資料,想查單個客戶不同時期的訂貨和統計情況。
經常更新的表當然不适合iot,因為oracle需要不斷維護索引,而且由于字段多索引成本就大。
如不是大多情況下使用主鍵通路表,就不要用IOT
内容來源于網絡收集
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/640706/viewspace-1025285/,如需轉載,請注明出處,否則将追究法律責任。
轉載于:http://blog.itpub.net/640706/viewspace-1025285/