--查看t2表行数据库分布 select id,dbms_rowid.rowid_relative_fno(rowid)||'_'||dbms_rowid.rowid_block_number(rowid) location from t2 order by location,id; --索引统计收集 exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T2',method_opt=>'for all columns size auto',cascade=>true,estimate_percent=>100); ----查看索引集群因子; select * from dba_indexes where table_name=upper('t1'); select table_name,owner,num_rows from dba_tables where table_name in ('T1','T2') 理想情况集群因子数大小等于表数据快数; 糟糕情况集群因子数大小等于表数据行数;意味着每通过索引访问一次数据就要有一次io获取一个block 来获取对应数据行; 高效索引是一个索引快里对应的数据行已经在第一次访问时就已经被加载到buffer pool 中,当访问索引中第二行数据时, 直接读buffer pool 中的db block即可。不需要额外的IO。 聚簇因子值大小对cbo判断是否走相关的索引起着至关重要的作用。 聚簇因子描述数据在表中的随机分布程度。 ---手动修改集群因子 exec dbms_stats.set_index_stats(ownname=>'SYS',indname=>'IDX_T1',clstfct=>2000000000,no_invalidate=>false)
原文链接:https://www.f2er.com/oracle/213872.html