2007-01-11

关于Oracle数据库中索引的维护经验谈

来源: 本站收集整理 作者:佚名 评论 0 条
 

  

五. 重建索引

(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 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:精华推荐:Oracle数据库业务优化心得  
下一篇:在数据字典中直接修改Oracle表列名
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号