我现在用的是oracle 9i 
1.一个表建立多少个索引比较合适?比如说不大于5个   
2.联合索引比单索引的效率高么?
3.compress 这个压缩 ,能起到什么作用?
4.上网上查资料时,都说oracle使用联合索引需要前导列,这个和版本有关系吗?
5.如果不需要前导列的话,reverse 这个反转 又起到什么作用呢?我自己用一个单表对索引进行了一个简单的测试,结果如下:
1、多个单索引 一起使用 
会分别调用各自的索引2、单索引和无索引字段  
会使用单索引3、联合索引和无索引字段 (不出现单索引字段)
会使用联合索引 (联合索引字段 不用强调顺序 ,也就是不需要前导列,无索引字段还可以在联合索引字段之间)4、单索引和联合索引一起使用 
   1)如果联合索引中字段全部出现 则使用联合索引 (联合索引字段 不用强调顺序)
   2)如果联合索引中只有部分字段出现 则会使用单索引  5、联合索引和联合索引一起使用
1)如果其中一个联合索引中只有部分字段出现 则会使用另一个联合索引
2)如果两个都完全使用,或都不完全使用 会选择其中一个使用(不出现单索引字段,如果出现,会使用间单索引), 具体怎么选择的,不清楚????说的不专业 大家凑合看, 希望指点小弟一下。 先谢谢啦。

解决方案 »

  1.   

    我现在用的是oracle 9i 
    1.一个表建立多少个索引比较合适?比如说不大于5个  
        这个没有定论,楼主要综合查询效率和dml效率自己确定,索引可以加快select的查询速度,但也会降低delete,insert和update等dml语句的执行速度。
    2.联合索引比单索引的效率高么? 
        如果联合索引中的多个字段都在where谓词中出现了,则联合索引效率比单列索引高,因为通过多个条件可以从索引中过滤得到更少的记录条数,也就减少了需要回表扫描的次数,甚至可以直接在联合索引中得到所查的所有结果,则不再需要回表。
        但是由于多列的联合索引肯定要比单列索引大,也就是说同样的索引需要存储的物理块要多于单列索引,所以,如果查询中只出现了联合索引中的某一列,则其效率不如单列索引。
    3.compress 这个压缩 ,能起到什么作用? 
        没研究过
    4.上网上查资料时,都说oracle使用联合索引需要前导列,这个和版本有关系吗? 
        前导列跟版本没有关系。
        前导列的概念是这样的,如果建立了f1,f2上的联合索引,则在查询时必须要用到f1,也就是所谓的前导列,该索引才会有效,因为索引是按照前导列排序的,如果where条件谓词中没有前导列,则需要执行索引扫描才能得到想要的结果,这种情况下其效率往往较差。
    5.如果不需要前导列的话,reverse 这个反转 又起到什么作用呢? 
        鉴于前面描述的前导列的概念,我们考虑如下表存储table(f1,f2);
       aa  1
       ab  2
       ac  3
       ad  4
       ae  5
       如果我们对表table建立f1上的普通索引,由于按照f1进行排序,所以针对where f1=ad则需要遍历所有的a开始的索引,而如果对f1建立reverse索引,则由于da只有一个,则可以更快的得到需要的结果。
      

  2.   

    3.compress 这个压缩 ,能起到什么作用? 
     压缩数据,降低存储空间。但是如果数据变动时需要先对数据进行解压缩这样会造成性能下降。所以看你侧重那个方面了。
      

  3.   

    路过,我最近在看书学习Oracle,希望好好研究能有所收获