| |
五. 重建索引
(1)检查需要重建的索引。
根据以下几方面进行检查,确定需要重建的索引。
第一,查看SYSTEM表空间中的用户索引。
为了避免数据字典的碎片出现,要尽量避免在SYSTEM表空间出现用户的表和索引。
select index_name
from dba_indexes
where tablespace_name='SYSTEM'
and owner not in ('SYS','SYSTEM')
/ |
第二,确保用户的表和索引不在同一表空间内。
表和索引对象的第一个规则是把表和索引分离。把表和相应的索引建立在不同的表空间中,最好在不同的磁盘上。这样可以避免在数据治理和查询时出现的许多I/O冲突。
set linesize 120
col "OWNER" format a20
col "INDEX" format a30
col "TABLE" format a30
col "TABLESPACE" format a30
select
i.owner "OWNER",
i.index_name "INDEX",
t.table_name "TABLE",
i.tablespace_name "TABLESPACE"
from
dba_indexes i,
dba_tables t
where i.owner=t.owner
and i.table_name=t.table_name
and i.tablespace_name=t.tablespace_name
and i.owner not in ('SYS','SYSTEM')
/ |
第三,查看数据表空间里有哪些索引
用户的默认表空间应该不是SYSTEM表空间,而是数据表空间。在建立索引时,假如不指定相应的索引表空间名,那么,该索引就会建立在数据表空间中。这是程序员经常忽略的一个问题。应该在建索引时,明确的指明相应的索引表空间。
col segment_name format a30
select
owner,
segment_name,
sum(bytes)
from dba_segments
where tablespace_name='数据表空间名'
and segment_type='INDEX'
group by owner,segment_name
/ |
第四,查看哪个索引被扩展了超过10次
随着表记录的增加,相应的索引也要增加。假如一个索引的next extent值设置不合理(太小),索引段的扩展变得很频繁。索引的extent太多,检索时的速度和效率就会降低。
| 共4页: 上一页 [1] [2] [3] 4 下一页 |
评论加载中…