為什麼索引的PCTUSED被設定為0
PCTUSED被設定為0
這是一個困擾我很長時間的問題了。
在Oracle的文件中就沒有設定PCTUSED這個引數,或者,Oracle已經將這個引數預設為0,但是為什麼Oracle要這樣做?
[@more@]PCTUSED被設定為0
這是一個困擾我很長時間的問題了。
在Oracle的文件中就沒有設定PCTUSED這個引數,或者,Oracle已經將這個引數預設為0,但是為什麼Oracle要這樣做?這個問題是一個國外的一個DBA試題,這個問題應該從以下來說起,
先說一個B*Tree上刪除一行記錄的原理來說:
在索引上刪除一行記錄,其實並不是真的將這行記錄從這個索引塊中刪除,實際上只是將這行記錄的一個標記位設定為刪除標誌,這樣Oracle就認為這一行被刪除,而事實上這一行在物理上是存在這個資料塊中,所以即使是這一行被刪除,這一行所佔用的空間也不會被重新利於。只有一種可能被利於這部分的空間,就是插入一行同樣值的行,或者將這個塊上的所有的行被刪除。
為什麼Oracle要這樣設定哪?主要的原因是因為,索引存放資料是按照一定的順序存放的,即使是這一行被刪除的話,其他數值的行是不能插入到這個位置的,所以,就是即使將這部分空間釋放也是沒有太大的意義的。
這一行不被刪除,而是做一個標識,對以後的同樣的資料的插入會不會有效能上的影響?或者做一個標識,和將這部分清除,會不會影響效能?
我個人的意見是應該不會的,因為,Oracle對資料庫的操作最小的單位是資料塊,不管是刪除還是做標識位,還是插入一個新的資料行,應該說不會影響資料塊的效能,所以之所以索引的PCTUSED被設定為0的主要原因是因為是空間由於索引存放的特點而不能被重複利用。
表需要 pct_used 引數,索引不需要 pct_used 引數。
因為表的索引的原理是不一樣的。表本質上是一種堆結構。想想表設定 pct_used 引數的目的是什麼?是為了當塊的空閒空間小於pct_used 時,該快重新回到 freelist,這樣,該塊就可以重新容納新的一行資料。而索引呢?索引插入哪個塊,哪個位置,是根據什麼確定的?是根據索引列的值本身。與索引段中某一個塊的空閒空間大小無關。如果索引列的值決定了索引必須插入了一個本來沒有空間的塊,oracle甚至不惜以分裂索引的代價來實現。相反,即使某些塊有很多剩餘空間,但是如果索引列的值不合適,剩餘空間再大,新索引項也不會考慮往這些塊儲存。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25465866/viewspace-2147321/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 為什麼Date物件被設定成過時了物件
- 為什麼設定反省錄
- 【MOS:1549181.1】為何在查詢中索引未被使用--為什麼索引沒有被使用索引
- 為什麼中國的程式設計師總被稱為碼農?程式設計師
- 如果將relay_log_recovery設定為0會發生什麼?
- 為什麼為什麼為什麼為什麼為什麼你要做一名程式設計師?程式設計師
- oracle為什麼不走索引Oracle索引
- 你不知道的React迴圈渲染時為什麼儘量不要把索引設定為key值?React索引
- Mysql:好好的索引,為什麼要下推?MySql索引
- MySQL索引那些事:什麼是索引?為什麼加索引就查得快了?MySql索引
- 為什麼 HashMap 的容量大小要設定為2的N次方?HashMap
- mysql為什麼加索引就能快MySql索引
- 為什麼編譯原理被稱為龍書?編譯原理
- 為什麼軟體會被稱為“軟體”
- (轉)Oracle為什麼不使用我的索引?Oracle索引
- 為什麼程式設計師總被認為是屌絲群體?程式設計師
- MYSQL索引為什麼這麼快?瞭解索引的神奇之處MySql索引
- 為什麼程式設計師做外包會被瞧不起?程式設計師
- 為什麼程式設計師總是被輕視?程式設計師
- 恢復被設定為Unused的欄位
- PHP為什麼會被認為是草根語言?PHP
- MySQL實戰 | 為什麼要使用索引?MySql索引
- MySQL索引為什麼使用B+樹?MySql索引
- 索引為什麼能提供查詢效能...索引
- Python 的切片為什麼不會索引越界?Python索引
- css為什麼設定div的寬度不起作用CSS
- antd ProTable 設定padding為0padding
- 什麼情況下需要建立索引? 索引的作用?為什麼能夠提高查詢速度?(索引的原理) 索引有什麼副作用嗎?索引
- 為什麼用「void 0」代替「undefined」Undefined
- 為什麼大公司要設定這麼高的門檻?
- 程式設計師修煉之為什麼程式設計師被稱為“夜貓子”程式設計師
- 程式設計師:為什麼“基礎不牢”成為我薪資被砍的理由?!程式設計師
- Twitter的市值為什麼被微博超過了?
- 深入淺出空間索引:為什麼需要空間索引索引
- MySQL為什麼採用B+樹作為索引結構?MySql索引
- 為什麼索引無法使用is null和is not null索引Null
- 為什麼無法設定連結的高度和寬度
- 請告訴我為什麼面試被拒面試