oracle 修改聚簇因子,Oracle 基础篇 --- 聚簇因子(clustering_factor)
####4.2.1 聚簇因子(clustering_factor)
統計幫助優化器生成使用索引的成功信息,并且是表中建立了索引的數據排序優良度的一個度量值;向優化器表明了具有同樣索引值的數據行是不是存放在同一個或連續的一系列數據塊中,或者數據行是否被分散存放在表的多個數據塊中。
查看索引的聚簇因子
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.
注: 如果你開始考慮重建表來改進聚簇因子,你需要很小心。表一般都有多個索引。你不可能通過重建表的方法使其排序方式適合某個索引而不影響其他列上的索引。因此,重建可能幫組改進了一個索引卻破壞了其他的索引。并且,重建表通常是非常耗費時間和資源的過程,因為你今天按照一定的順序重建了表并不意味著隨著時間的推移,數據行插入、更新或刪除之后還能保持這樣的順序。
總結
以上是生活随笔為你收集整理的oracle 修改聚簇因子,Oracle 基础篇 --- 聚簇因子(clustering_factor)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在config.php文件中,写好了co
- 下一篇: oracle常用函数api,Oracle