hot和iot的起源堆組織表的儲存速度因為不用考慮排序, 所以儲存速度會比較快。 但是要查詢符合某個條件的記錄, 就必須得讀取全部的記錄以便篩選。
而這個時候為了加快查詢速度, 索引就出現了, 索引是針對少量特定欄位的值拿出來進行排序儲存, 並記錄在表中的位置,
而因為索引是有序的, 所以就會很容易通過索引查詢到具體的記錄位置, 然後再根據記錄位置直接從表中讀取該記錄。
同時因為索引的字段較少, 所以索引通常會比其基表小得多。
從上面通過索引訪問表記錄的方式可以看出, 當要訪問的資料量較大時, 通過每一條記錄的位置去訪問原始記錄,
每一條符合條件的記錄都需要經過索引訪問後再訪問基表這樣乙個複雜的過程, 這會花費很多時間,
同樣, 如果不經過索引而直接查詢表, 也可能因為表字段太多, 記錄較大的情況下把全部的資料讀取進來, 這也會花費很多時間。
那怎麼辦呢?
這個時候就會想到, 如果表中資料本身就是有序的, 這樣查詢表的時候就可以快速的找到符合條件的記錄位置,
而很容易判斷符合條件記錄的位置, 這樣只需要讀取一小部分資料出來就可以了, 不需要全表記錄都讀取出來進行判斷。
索引表就這樣產生了。當然索引表中插入,更新資料的時候可能會因為需要排序而將資料重組, 這時候資料插入或更新速度會比堆組織表慢一些。
如果堆組織表上有索引, 那麼對堆組織表的插入也會因為要修改索引而變慢
我們可以看到堆組織表+索引的方式 與 索引表 都能夠實現資料的快速查詢, 那為什麼不全部採用索引表呢, 這樣不是很簡單嗎?
我能想到的是前者我們可以針對不同的查詢條件建立多個索引, 而後者卻不行, 後者只能對某一組查詢條件有效。
當然了,索引表上查詢任何記錄都是走索引的, 因為它本身就是索引結構。
當查詢條件不符合指定條件時, 必須走 index full sacn , 需要掃瞄全部索引。
這就是說這時無法利用索引表已經根據某些字段排序的事實。也即排序對於這個查詢來說無用。
而符合指定的條件時就會走 index range scan
㈡ 定義
① 堆組織表,其索引中記錄了記錄所在位置的rowid,查詢的時候先找索引,然後再根據索引rowid找到塊中的行資料。索引和表資料是分離的
② 索引組織表,其行資料以索引形式存放,因此找到索引,就等於找到了行資料。索引和資料是在一起的
㈢ 查詢過程
① 堆組織表
一般索引大概3-5層,比如rowid為007,那麼要找到007可能會先從第一層找<1000,再在第二層找到<100
然後在第三層找到007(注意這已經是3次i/o)
接著再通過007中標識的rowid去對應的磁碟上讀取塊中的行資料(第4次i/o)
② 索引組織表
前面的步驟同上,但是找到007後,由於資料和索引在一起,因此不必再找什麼rowid,直接返回結果了
Oracle效能調優
在過去的十年中,oracle已經成為世界上最專業的資料庫之一。對於it專家來說,就是要確保利用oracle的強大特性來提高他們公司的生產力。最有效的方法之一是通過oracle調優。它有大量的調整引數和技術來改進你的oracle資料庫的效能。oracle調優是乙個複雜的主題。關於調優可以寫整整一本書,...
SQL調優之九 堆組織表,索引組織表以及表聚簇
說在最前頭,一切快慢都是相對來說的 預設情況下,我們用create table建立出來的表就是堆組織表,在往這種表裡面插入 匯入資料的時候不會按某種特殊排列方式的。表中的每一行都有乙個獨一的rowid,當行移動的時候rowid也會跟著變化,即便是在同乙個heap裡面移動。舉例來說,你從漢語詞典撕了幾...
Oracle效能調優原則
任何事情都有它的源頭,要解決問題,也得從源頭開始,影響oracle效能的源頭非常多,主要包括如下方面 資料庫的硬體配置 cpu 記憶體 網路條件。1.cpu 在任何機器中cpu的資料處理能力往往是衡量計算機效能的乙個標誌,並且oracle是乙個提供並行能力的資料庫系統,在cpu方面的要求就更高了,如...