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