聚簇因子的理解
----轉載
其實這個概念很好理解,只是感覺當時理解了,過了段時間又模糊了,所以今天整理了下,
稍加深入思考:)
功力有限,有錯漏的地方還請大家指正。
Cluster Factor:聚簇因子
體現資料的離散程式(相對索引鍵而言)。
這個指標反應了被索引段是否按照索引鍵值密集的儲存在一起,值越小,則
索引使用效率越高。
現實舉例:我們知道,我們小時候查的字典也有索引,分為拼音索引和部首索引(其實還有一種
想不起來了),拼音索引的效率最高,聚簇因子最小,因為字典的內容就是按照拼音來順序儲存的,
比如:當我們要查詢與“啊”字同音的字時,只要先在索引中找到"啊"第一聲,與"啊"第二聲所對應的
頁(在資料庫中就對應塊號了),則我們就可以直接翻到這"幾頁"進行查詢了。
而另外一方面,假如我們查詢有"匚"部首的字時,我們知道,這些部首可能分佈在字典中
的每頁中。
針對部首的情況我們就要科幻一下場景了,假如現在你變身為超人,超人一般看書都是秒記
的,假如你設定自己一次可以看128頁(db_file_multiblock_read_count)的字典內容(其
它功力用來做其它的事,一心多用嘛),那麼在這種情況下,假如你查詢有"匚"部首的字,你
還會去看索引嗎?我想你肯定會去快速的翻看整個字典來連到自己的目的。
另外,索引讀一般都是一塊一塊的讀取(ffs除外),這堅定了超人的選擇(超人做事圖的就是個霸氣),而實際中的超人就是CBO所使用的基礎資源。
資料庫層舉例:表tab列col擁有索引,我們知道索引是排序過的段,所以如果表段中資料
行按照索引鍵順序儲存,則這個索引的聚簇因子就很小,此時稱索引段鍵值順序與表段列
順序成平行狀態,索引工作效率最高,被使用情況最大。
索引段 表段
A------- A des1
A des2
B------- B des4
B des9
C------- C des10
而對於聚簇因子很大的情況下,上圖中就呈現出交叉狀態,而非平行狀態了。
針對上圖再做個思考:在資料段值相對與索引鍵值很散的情況下,假如我們做如下謂詞篩選
where col between 'A' and 'B',則在查A(A所在索引塊為block 8)所對應的表記錄時,Ora
cle可能遍歷過佔整個表段的38%的資料塊,而當查詢B(B所有索引塊為block 9)所對應的表記
錄時,Oracle可能又遍歷了查詢A時所遍歷的80%的buffer塊(只能說B相對與A更散),而此時
實際的掃描塊佔表段大概是0.35+0.35*0.8=0.63,而其實整個返回的行可能只佔整個記錄的
20%,但是此時CBO當然不會採用索引掃描,而是採用全表掃描,畢竟處理起來更加的塊,相
應的邏輯讀也會降低很多。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-751490/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE 聚簇因子優化Oracle優化
- 聚簇因子和執行計劃的聯絡
- 淺談索引系列之聚簇因子(clustering_factor)索引
- clustering factor索引聚簇因子和執行計劃索引
- 【實驗】【聚簇】聚簇(Cluster)和聚簇表(Cluster Table)的建立與總結
- MySQL中的聚簇索引和非聚簇索引MySql索引
- 淺談聚簇索引與非聚簇索引索引
- 聚簇索引索引
- MySQL聚簇索引和非聚簇索引的原理及使用MySql索引
- 關於索引聚簇因子(CLUSTERING_FACTOR)引起的sql優化過程索引SQL優化
- Oracle聚簇表Oracle
- 【效能優化】Oracle 效能優化:降低列值聚簇因子 提高查詢效率優化Oracle
- 一分鐘明白MySQL聚簇索引和非聚簇索引MySql索引
- 聚簇表簡介
- 資料庫表,索引(索引組織表,聚簇表,聚簇索引,)資料庫索引
- 【效能最佳化】Oracle 效能最佳化:降低列值聚簇因子 提高查詢效率Oracle
- 一看就懂的MySQL的聚簇索引,以及聚簇索引是如何長高的MySql索引
- 聚簇索引和非聚簇索引到底有什麼區別?索引
- 理解索引和聚簇——效能調整手冊和參考索引
- 聊聊Oracle聚簇Cluster(上)Oracle
- oracle 聚簇表學習Oracle
- 一次簡單的效能優化診斷,聚簇因子過高導致全表掃描。優化
- 資料庫聚簇索引——not null條件對唯一鍵索引成為聚簇索引的影響資料庫索引Null
- InnoDB學習(八)之 聚簇索引索引
- MySQL 聚簇索引 和覆蓋索引MySql索引
- MySQL 聚簇索引一定是主鍵嗎MySql索引
- MySQL innodb如何選擇一個聚簇索引MySql索引
- 【Mysql】InnoDB 中的聚簇索引、二級索引、聯合索引MySql索引
- Oracle的簇與簇表Oracle
- [MySQL]為什麼非聚簇索引不儲存資料位置MySql索引
- 學習SVM(五)理解線性SVM的鬆弛因子
- oracle中的簇Oracle
- 一篇文章講清楚MySQL的聚簇/聯合/覆蓋索引、回表、索引下推MySql索引
- 簇表及簇表管理(Index clustered tables)Index
- MySQL的B+Tree索引到底是咋回事?聚簇索引到底是如何長高的?MySql索引
- oracle簇clusterOracle
- oracle cluster(簇)的簡單使用Oracle
- exec函式簇函式