Oracle 聚簇因子(Clustering factor)

來源:互聯網
上載者:User

聚簇因子是 Oracle 統計資訊中在CBO最佳化器模式下用於計算cost的參數之一,決定了當前的SQL語句是否走索引,還是全表掃描以及是否作為嵌套串連外部表格等。如此這般,那到底什麼是聚簇因子,那些情況下會影響到聚簇因子,以及如何提高聚簇因子?本文將對此展開描述。

1、堆表的儲存方式

Oralce 資料庫系統中最普通,最為常用的即為堆表。

堆表的資料存放區方式為無序儲存,也就是任意的DML操作都可能使得當前資料區塊存在可用的空閑空間。

處於節省空間的考慮,塊上的可用空閑空間會被新插入的行填充,而不是按順序填充到最後被使用的塊上。

上述的操作方式導致了資料的無序性的產生。

當建立索引時,會根據指定的列按順序來填充到索引塊,預設的情況下為升序。

建立或重建索引時,索引列上的順序是有序的,而表上的順序是無序的,也就是存在了差異,即表現為聚簇因子。

2、什麼是聚簇因子(clustering factor/CF)

聚簇因子是基於表上索引列上的一個值,每一個索引都有一個聚簇因子。

用於描述索引塊上與表塊上儲存資料在順序上的相似程度,也就說表上的資料行的儲存順序與索引列上順序是否一致。

在全索引掃描中,CF的值基本上等同於物理I/O或塊訪問數,如果相同的塊被連續讀,則Oracle認為只需要1次物理I/O。

好的CF值接近於表上的塊數,而差的CF值則接近於表上的行數。

聚簇因子在索引建立時就會通過表上存存在的行以及索引塊計算獲得。

3、Oracle 如何計算聚簇因子

執行或預估一次全索引掃描。

檢查索引塊上每一個rowid的值,查看是否前一個rowid的值與後一個指向了相同的資料區塊,如果指向了不相同的資料區塊則CF的值增加1。

當索引塊上的每一個rowid被檢查完畢,即得到最終的CF值。

4、聚簇因子圖示

a、良好的索引與聚簇因子的情形

b、良好的索引、差的聚簇因子的情形

c、差的索引、差的聚簇因子的情形

  • 1
  • 2
  • 3
  • 4
  • 下一頁

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.