新博客http://www.cnblogs.com/zhjh256 欢迎访问
分类: Oracle
2008-04-02 09:57:08
sys_op_lbid()可以用来直接得到索引页块中的信息。
重建或者coalesce索引的提示可包含如下:
1. 如果有很多块的rows_per_block很小,并且只有很少的快具有较大的rows_per_block值,那么这很可能是一个处理FIFO队列的索引,可以考虑对其进行coalesce。
2. 如果有少量的块具有特别多的行,那么索引的其他部分可能是不好的索引块拆分不好造成的,在这种情况下,重建索引可以将索引压到少量的空间中,并且不会导致之后立刻出现大量的拆分现象。如果在重建后的几个小时内,大量的块又被拆分了,那么重建是不恰当的。
rem 对于一个简单的B树索引,sys_op_lbid()的第一个参数为索引的object_id。该例子用来分析每个页块中的索引条目,索引在T1表的(v1, small_pad)上,在WHERE子句中使用NOT NULL是为了防止完全为空的索引条目出现。
column ind_id new_value m_ind_id
select object_id ind_id
from user_objects
where object_name = 'T1_I1'
;
break on report skip 1
compute sum of blocks on report
select
rows_per_block, count(*) blocks
from (
select
/*+
cursor_sharing_exact
dynamic_sampling(0)
no_monitoring
no_expand
index_ffs(t1,t1_i1)
noparallel_index(t,t1_i1)
*/
sys_op_lbid( &m_ind_id ,'L', t1.rowid) as block_id,
count(*) as rows_per_block
from
t1
-- t1 sample block (100)
where
v1 is not null
or small_pad is not null
group by
sys_op_lbid( &m_ind_id ,'L', t1.rowid)
)
group by rows_per_block
;