oracle的clustering_factor
CLUSTERING_FACTOR表示表上資料的儲存順序和索引欄位的順序符合的程度,clustering_factor主要影響index range scan
1、表中資料的存放順序按object_id存放,索引也建在object_id列上。
預測:因為資料在表中存放順序和索引順序一致,,clustering_factor和表資料塊個數應該相近。
SQL> drop table test;
Table dropped.
SQL> create table test as select * from dba_objects order by object_id;
Table created.
SQL> create index idx_test_object_id on test(object_id);
Index created.
SQL> analyze table test compute statistics for table for all indexes for all indexed columns;
Table analyzed.
SQL> select table_name,blocks,num_rows from user_tables where table_name='TEST';
TABLE_NAME BLOCKS NUM_ROWS
------------------------------ ---------- ----------
TEST 705 49842
SQL> select clustering_factor from user_indexes where index_name='IDX_TEST_OBJECT_ID';
CLUSTERING_FACTOR
-----------------
685
表資料塊數是705,索引聚簇因子是685,接近。發現聚簇因子比資料塊數還要少,這是為什麼?其實只要稍加註意就會了解到,資料塊中不只包含資料還包含一些其他控制資訊,而clustering_factor只包含有資料。
2、表中資料按object_name順序存放,索引建在object_id列上。
預測:表中資料存放順序和索引排序順序不一定一致,所以聚簇因子會遠遠大於資料塊數。
SQL> drop table test;
Table dropped.
SQL> create table test as select * from dba_objects order by object_name;
Table created.
SQL> create index idx_test_object_id on test(object_id);
Index created.
SQL> analyze table test compute statistics for table for all indexes for all indexed columns;
Table analyzed.
SQL> select table_name,blocks,num_rows from user_tables where table_name='TEST';
TABLE_NAME BLOCKS NUM_ROWS
------------------------------ ---------- ----------
TEST 705 49842
SQL> select clustering_factor from user_indexes where index_name='IDX_TEST_OBJECT_ID';
CLUSTERING_FACTOR
-----------------
36531
表中資料塊數705,資料行49842,聚簇因子36531.聚簇因子遠遠大於表中資料塊數,更接近於表中資料行數。
關於clustering_factor的計算方法:
因為索引是排序的,所以oracle會先找到表中物理儲存的第一行,該行的clustering_factor=1;
再看物理儲存的第二行,如果該行與第一行在同一個資料塊,聚簇因子clustering_factor還是1不會增加,否則加1;
依次類推,直到表中所有行都計算完。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24496749/viewspace-723294/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- CLUSTERING_FACTOR影響執行計劃
- 11g 是否有解決clustering_factor 高的問題
- 淺談索引系列之聚簇因子(clustering_factor)索引
- 關於索引聚簇因子(CLUSTERING_FACTOR)引起的sql優化過程索引SQL優化
- CLUSTERING_FACTOR、回表、資料分佈傾斜走全表還是索引索引
- 索引掃描可能不如全表掃描的場景的理解__純粹資料量而言,不涉及CLUSTERING_FACTOR索引
- oracle的比率:Oracle
- oracle的ACLOracle
- oracle的flashbackOracle
- oracle的GOracle
- oracle的rownumOracle
- oracle的SCNOracle
- oracle的索引Oracle索引
- oracle的表Oracle
- oracle的鎖Oracle
- Oracle-監控oracle的等待事件Oracle事件
- Oracle (block clean out) oracle的塊清除OracleBloC
- Oracle中Kill session的研究 for oracle -- 轉OracleSession
- Oracle的Cast的用法OracleAST
- oracle的undo的作用Oracle
- 【RECO_ORACLE】Oracle閃回PDB的方法Oracle
- oracle 11g中的 oracle restart特性OracleREST
- oracle學習筆記--oracle常用的命令Oracle筆記
- 水煮oracle26-----oracle的儲存裝置的配置Oracle
- oracle心得5--oracle的增刪改查@oracle的事務處理@案例分析Oracle
- oracle樹的裁剪Oracle
- Oracle:DG 的 switchoverOracle
- Oracle的快照standbyOracle
- Oracle的壓測Oracle
- Oracle中的publicOracle
- Oracle 中的userenv()Oracle
- Oracle中的段Oracle
- oracle OMF的使用Oracle
- Oracle的move操作Oracle
- oracle rac的特徵Oracle特徵
- Oracle Statspack的使用Oracle
- Oracle的並行Oracle並行
- oracle hints的使用Oracle