Oracle 基礎篇 --- 聚簇因子(clustering_factor)

####4.2.1 聚簇因子(clustering_factor)優化

統計幫助優化器生成使用索引的成功信息,而且是表中創建了索引的數據排序優良度的一個度量值;向優化器代表了具備一樣索引值的數據行是否是存放在同一個或連續的一系列數據塊中,或者數據行是否被分散存放在表的多個數據塊中。code

查看索引的聚簇因子排序

select T.TABLE_NAME || '.' || I.INDEX_NAME index_name, I.CLUSTERING_FACTOR, T.BLOCKS, T.NUM_ROWS
 from user_indexes i, user_tables t
 where I.TABLE_NAME = T.TABLE_NAME
    and T.TABLE_NAME = 'EMPLOYEES'
    and I.INDEX_NAME = 'EMP_DEPARTMENT_IX'
order by T.TABLE_NAME, I.INDEX_NAME;

INDEX_NAME                     CLUSTERING_FACTOR     BLOCKS   NUM_ROWS
------------------------------ ----------------- ---------- ----------
EMPLOYEES.EMP_DEPARTMENT_IX                    9          5        109

計算索引的聚簇因子索引

select department_id, last_name, blk_no, 
        lag (blk_no, 1, blk_no) over (order by department_id) prev_blk_no,
        case when blk_no != lag (blk_no, 1, blk_no) over (order by department_id) or rownum = 1
                then '***  +1'
                else null
        end cluf_ct
from (
    select department_id, last_name,
             DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) blk_no
     from HR.EMPLOYEES
   where department_id is not null
   order by department_id 
);

DEPARTMENT_ID LAST_NAME                     BLK_NO PREV_BLK_NO CLUF_CT
------------- ------------------------- ---------- ----------- -------
           10 Whalen                           203         203 ***  +1
           20 Hartstein                        203         203
           20 Fay                              203         203
           30 Raphaely                         207         203 ***  +1
           30 Colmenares                       207         207
           30 Khoo                             207         207
........
           40 Mavris                           203         207 ***  +1
           50 Grant                            203         203
........
           50 Cabrio                           207         203 ***  +1
........
           60 Raphealy                         205         207 ***  +1
           60 Raphealy1                        205         205
           60 Austin                           207         205 ***  +1
           60 Ernst                            207         207
           60 Hunold                           207         207
           70 Baer                             203         207 ***  +1
           80 Hall                             207         203 ***  +1
           80 Livingston                       207         207
........
		   100 Greenberg                        207         207
		   110 Higgins                          203         207 ***  +1
           110 Gietz                            203         203

107 rows selected.

注: 若是你開始考慮重建表來改進聚簇因子,你須要很當心。表通常都有多個索引。你不可能經過重建表的方法使其排序方式適合某個索引而不影響其餘列上的索引。所以,重建可能幫組改進了一個索引卻破壞了其餘的索引。而且,重建表一般是很是耗費時間和資源的過程,由於你今天按照必定的順序重建了表並不意味着隨着時間的推移,數據行插入、更新或刪除以後還能保持這樣的順序。資源

相關文章
相關標籤/搜索