我在维护一个大的系统,有一个表有很多索引,我估计有些索引没有使用,我想清理清理,如何统计(查询)索引的使用情况呢?

解决方案 »

  1.   

    index使用情况是什么意思:
    是指index被update的频率还是index 在query中是否使用? 如果你指后者:
     用SET AUTOTRACE ON 来查看(SQLPLUS中)
     或enable SQL_TRACE
      

  2.   

    这个好象办不到,没有这样的统计表,索引的使用都是随着应用来的。
    不过你可以这样做:
    1、查一下该表都正在用过哪些sql语句
     SELECT address,piece,sql_text
       FROM v$sqltext
      WHERE sql_text LIKE '%TABLE_NAME%'
      ORDER BY address,piece
    2、使用pl/sql developer看每组sql都用到了哪些索引。
      

  3.   

    楼上的,不要误导人,谁说索引不占用物理空间的。如果你的系统是在9I下是有办法的,请参考这个帖子:
    http://www.dbazine.com/liu3.html
      

  4.   

    行索引重建的前的调查工作,还是需要进行Oracle进行一个数据统计的,建议使用DBMS_STATS统计包完成。
      

  5.   

    to tuidler() ( ):
    你是说这句吗?
    Indexes take lot of tablespace storage; in many cases, indexes take more storage space than indexed tables.
    这是病句啊!不要崇拜老外嘛。
    在英语中,没有“lot of",只有“lots of" 或"a lot of"。
    我认为“lot of”应改为“little of”。
    不过,网友推荐的网址的确不错,楼主可以仔细看一看。再转贴: 
    http://www.dbazine.com/liu3.html
      

  6.   

    to  BlueskyWide(谈趣者) :
    你很幽默,但是请你去仔细看看数据库管理的书.好不好,不要在这里来谈论什么英语的病句.
    为什么要索引空间和表空间要分离,如果你建一堆索引,它们使用它们自己的索引表空间,请你自己看看索引表空间是否会占用.
      

  7.   

    to tuidler() ( ):
    你也很幽默,起先不知楼主的ORACLE版本,
    索引空间和表空间要分离好像是近年来的事,
    若干年后,说不定ORACLE为方便用户使用又缺省地合并到某个空间中!?
    顺便请教一下,现在的视图是否也有自已的空间?