Oracle堆組織表的索引和索引組織表
Oracle堆組織表的索引和索引組織表 :
堆組織表,其索引中記錄了資料行所在位置的rowid,查詢的時候先找索引,然後再根據索引rowid找到塊中的行資料。索引和表的資料是分離的 。
索引組織表,其行資料以索引形式存放,因此找到索引,就等於找到了行資料。索引組織表的索引和資料是在一起的 。
索引組織表,其行資料以索引形式存放,因此找到索引,就等於找到了行資料。索引組織表的索引和資料是在一起的 。
堆組織表索引查詢過程 -------
一般索引大概會有3-5層,比如rowid為005,那麼它要找到005可能會先從第一層找<1000的,再在第2層找到<100的,然後第3層找到005(注意,這已經是三次io嘍),然後再透過005中標識的rowid去對應的磁碟上讀取塊中的行資料(第4次io)
索引組織表索引查詢過程 --------
前面的步驟同上,但是找到005後,由於資料與索引在一起,因此不必再找什麼rowid,直接即可返回結果了
-----------------------------------------------------------------------------------------------------------
堆組織表的儲存速度因為不用考慮排序, 所以儲存速度會比較快. 但是要查詢符合某個條件的記錄, 就必須得讀取全部的記錄以便篩選.
而這個時候為了加快查詢速度, 索引就出現了, 索引是針對少量特定欄位的值拿出來進行排序儲存, 並記錄在表中的位置,
而因為索引是有序的, 所以就會很容易透過索引查詢到具體的記錄位置, 然後再根據記錄位置直接從表中讀取該記錄.
同時因為索引的欄位較少, 所以索引通常會比其基表小得多.
從上面透過索引訪問表記錄的方式可以看出, 當要訪問的資料量較大時, 透過每一條記錄的位置去訪問原始記錄,
每一條符合條件的記錄都需要經過索引訪問後再訪問基表這樣一個複雜的過程, 這會花費很多時間,
同樣, 如果不經過索引而直接查詢表, 也可能因為表欄位太多, 記錄較大的情況下把全部的資料讀取進來, 這也會花費很多時間.
那怎麼辦呢?
這個時候就會想到, 如果表中資料本身就是有序的, 這樣查詢表的時候就可以快速的找到符合條件的記錄位置,
而很容易判斷符合條件記錄的位置, 這樣只需要讀取一小部分資料出來就可以了, 不需要全表記錄都讀取出來進行判斷.
索引表就這樣產生了.當然索引表中插入,更新資料的時候可能會因為需要排序而將資料重組, 這時候資料插入或更新速度會比堆組織錶慢一些.
如果堆組織表上有索引, 那麼對堆組織表的插入也會因為要修改索引而變慢
我們可以看到堆組織表+索引的方式 與 索引表 都能夠實現資料的快速查詢, 那為什麼不全部採用索引表呢, 這樣不是很簡單嗎?
我能想到的是前者我們可以針對不同的查詢條件建立多個索引, 而後者卻不行, 後者只能對某一組查詢條件有效.
而這個時候為了加快查詢速度, 索引就出現了, 索引是針對少量特定欄位的值拿出來進行排序儲存, 並記錄在表中的位置,
而因為索引是有序的, 所以就會很容易透過索引查詢到具體的記錄位置, 然後再根據記錄位置直接從表中讀取該記錄.
同時因為索引的欄位較少, 所以索引通常會比其基表小得多.
從上面透過索引訪問表記錄的方式可以看出, 當要訪問的資料量較大時, 透過每一條記錄的位置去訪問原始記錄,
每一條符合條件的記錄都需要經過索引訪問後再訪問基表這樣一個複雜的過程, 這會花費很多時間,
同樣, 如果不經過索引而直接查詢表, 也可能因為表欄位太多, 記錄較大的情況下把全部的資料讀取進來, 這也會花費很多時間.
那怎麼辦呢?
這個時候就會想到, 如果表中資料本身就是有序的, 這樣查詢表的時候就可以快速的找到符合條件的記錄位置,
而很容易判斷符合條件記錄的位置, 這樣只需要讀取一小部分資料出來就可以了, 不需要全表記錄都讀取出來進行判斷.
索引表就這樣產生了.當然索引表中插入,更新資料的時候可能會因為需要排序而將資料重組, 這時候資料插入或更新速度會比堆組織錶慢一些.
如果堆組織表上有索引, 那麼對堆組織表的插入也會因為要修改索引而變慢
我們可以看到堆組織表+索引的方式 與 索引表 都能夠實現資料的快速查詢, 那為什麼不全部採用索引表呢, 這樣不是很簡單嗎?
我能想到的是前者我們可以針對不同的查詢條件建立多個索引, 而後者卻不行, 後者只能對某一組查詢條件有效.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-604555/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 索引組織表Oracle索引
- Oracle 索引組織表(IOT)Oracle索引
- ORACLE索引組織表討論Oracle索引
- oracle iot索引組織表(一)Oracle索引
- oracle iot索引組織表(二)Oracle索引
- Oracle 堆組織表(HOT)Oracle
- 索引組織表上建立BITMAP索引(三)索引
- 索引組織表上建立BITMAP索引(二)索引
- 索引組織表上建立BITMAP索引(一)索引
- 索引組織表(Index Organizied Table)索引Index
- 資料庫表,索引(索引組織表,聚簇表,聚簇索引,)資料庫索引
- 索引組織表(index organized table ,IOT)索引IndexZed
- 在OLTP系統使用索引組織表IOT索引
- SQL Server 重新組織生成索引SQLServer索引
- [20151008]索引組織表上建立BITMAP索引.txt索引
- Oracle DBA的資源和組織Oracle
- 關於通過聚集索引以及堆來對比資料表組織結構-SQLServer最優實踐 的一點看法索引SQLServer
- 【BUG】當使用TTS(傳輸表空間時)從其他平臺到HP可造成索引組織表損壞TTS索引
- oracle 表分析和索引Oracle索引
- 組織程式和資料
- EXCEL破冰 - 如何為透視表組織資料Excel
- 組織的紀律
- 流程型組織
- [20120324]IOT索引組織表相關資訊的學習(二).txt索引
- ORACLE分析表和索引的指令碼Oracle索引指令碼
- ORACLE 組合索引 使用分析Oracle索引
- Oracle表與索引的分析及索引重建Oracle索引
- 組織知識的方法
- 系統的模組組織
- 企業IT組織的治理
- 新的組織結構
- MySQL單列索引和組合索引的區別MySql索引
- Oracle 表的移動和索引的重建Oracle索引
- [20120509]IOT索引組織表相關資訊的學習(三).txt索引
- [20120509]IOT索引組織表相關資訊的學習(四).txt索引
- 組織css程式碼CSS
- puppet組織架構架構
- SD 組織資料