HEIGHT               3
BLOCKS               1024
NAME                 TBL_PNR_DATE
PARTITION_NAME      
LF_ROWS              200000
LF_BLKS              884
LF_ROWS_LEN          3800000
LF_BLK_LEN           7996
BR_ROWS              883
BR_BLKS              5
BR_ROWS_LEN          18371
BR_BLK_LEN           8028
DEL_LF_ROWS          0
DEL_LF_ROWS_LEN      0
DISTINCT_KEYS        2
MOST_REPEATED_KEY    192000
BTREE_SPACE          7108604
USED_SPACE           3818371
PCT_USED             54
ROWS_PER_KEY         100000
BLKS_GETS_PER_ACCESS 50003.5
PRE_ROWS             0
PRE_ROWS_LEN         0
OPT_CMPR_COUNT       1
OPT_CMPR_PCTSAVE   41有个表现在要测试数据量在10w,100w,500w,1000w,2000w情况下做UPDATE、INSERT、SELECT等操作的使用速度,建有两个独立索引(create index建立的),这是我analyze索引后用SELECT * FROM index_stats;查出的结果,请问查看哪些值,如何判断这个表的索引使用情况呢?(我看这里有BTREE的值,使用create index就是BTREE索引?)请高手指点!谢谢!

解决方案 »

  1.   

    1、索引使用情况,你要看具体SQL语句的执行计划。
    2、使用普通create index建立的都是b*树索引。
      

  2.   

    1.执行计划很重要
    2.这个视图也提供了很多重要的信息index_stats
      比如块的大小,B数的高度,填充率,填充因子等等都将影响到索引的查询效率
    关于这个试图的具体描述:
    http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/statviews_4216.htm
      

  3.   

    1、请问分析表索引时使用:
    analyze table tablename compute statistics for all indexes; 
    analyze table tablename compute statistics for all indexed columns; 
    analyze table tablename compute statistics for table; 
    这三个的区别是什么呢?2、另外,定期想整理下表空间的索引,是用analyze做表分析还是应该用alter index index_name rebuild tablespace来重建索引呢?3、alter index index_name rebuild tablespace中的tablespace是指在该表空间的index_name索引?加与不加有什么区别呢?谢谢!
      

  4.   

    另外analyze table是否也进行了索引重建呢?
      

  5.   

    analyze一个表或者索引,只是把这个表或者索引最新的存储情况反馈给db,并不会对表或索引的存储做出修改,这样做是为了让db根据这些信息生成最优的查询计划。rebuild index是在表中的数据做了频繁的修改,刚开始创建的索引不能很准确的体现现在表中数据块的存储结构才做的操作,让索引准确的指定rowid。这两个都可以在一定的情况下提高查询效率,但是实现的机制不一样,analyze是我们手动帮助db收集信息,而rebuild index是修改索引的数据块内容。如果数据库中对象长期没有做analyze,就算rebuild index后一样不会有效果。我实际遇到的一个情况:查询一条SQL在一个建库2年的数据库中需要半个小时(有索引且使用),rebuild index后查询性能并没有得到提升,在analyze表和索引后只需要不到10s。rebuild index后的tablespace的作用是可以将索引移动到其他表空间去(和创建索引的表空间不是同一个表空间)。9i数据库需要手动定期analyze,好像10g不需要这样的操作,不知道有没有高手告诉下原因~~~
      

  6.   

    1、按照您的意思,就是应该定期先对表做analyze,然后在rebuild index,这样最能提高数据库性能?
    2、那分析表时应该使用下面哪条语句呢?
    analyze table tablename compute statistics for all indexes;  
    analyze table tablename compute statistics for all indexed columns;  
    analyze table tablename compute statistics for table;  谢谢您的指点!
      

  7.   

    并不太清楚上面的语句有什么不一样,可以用下面的语句分别执行analyze table table_name compute statistics;analyze index index_name compute statistics;
      

  8.   


    Oracle10g开始增加了自动表分析功能。
      

  9.   

    1、“Oracle10g开始增加了自动表分析功能。”
    是否有参数可控制,还是说根本就不用管分析表了呢?2、分析表时是使用:
    analyze table table_name compute statistics;
    analyze index index_name compute statistics;
    还是:
    analyze table table_name validate structure;
    analyze index index_name validate structure;
    呢?