1.没用上。where子句中包含索引列时,才用上索引;
2.http://oracle.chinaitlab.com/install/37663.html

解决方案 »

  1.   

    1. select * from t where name='x'时使用了索引了吗? //除非你在name上建了索引
    要不然强制使用索引
    select /*+ index(t idx_id) */* from t where name='x'(idx_id是id列上的索引)2.  OPS在9I好象叫做RAC,就是数据文件放在磁盘阵列上由几个实例共享,可以实现负载平衡,failover等功能,对用户来说是透明的(象只有一个实例在服务)
      

  2.   

    反向索引  反向索引是B*Tree索引的一个分支,它的设计是为了运用在某些特定的环境下的。Oracle推出它的主要目的就是为了降低在并行服务器(Oracle Parallel Server)环境下索引叶块的争用。当B*Tree索引中有一列是由递增的序列号产生的话,那么这些索引信息基本上分布在同一个叶块,当用户修改或访问相似的列时,索引块很容易产生争用。反向索引中的索引码将会被分布到各个索引块中,减少了争用。反向索引反转了索引码中每列的字节,通过dump()函数我们可以清楚得看见它做了什么。举个例子:1,2,3三个连续的数,用dump()函数看它们在Oracle内部的表示方法。SQL> select 'number',dump(1,16) from dual
      2  union all select 'number',dump(2,16) from dual
      3  union all select 'number',dump(3,16) from dual;'NUMBE DUMP(1,16)
    ------ -----------------
    number Typ=2 Len=2: c1,2 (1)
    number Typ=2 Len=2: c1,3 (2)
    number Typ=2 Len=2: c1,4 (3)  再对比一下反向以后的情况:SQL> select 'number',dump(reverse(1),16) from dual
      2  union all select 'number',dump(reverse(2),16) from dual
      3  union all select 'number',dump(reverse(3),16) from dual;'NUMBE DUMP(REVERSE(1),1
    ------ -----------------
    number Typ=2 Len=2: 2,c1 (1)
    number Typ=2 Len=2: 3,c1 (2)
    number Typ=2 Len=2: 4,c1 (3)   我们发现索引码的结构整个颠倒过来了,这样1,2,3个索引码基本上不会出现在同一个叶块里,所以减少了争用。不过反向索引又一个缺点就是不能在所有使用常规索引的地方使用。在范围搜索中其不能被使用,例如,where column>value,因为在索引的叶块中索引码没有分类,所以不能通过搜索相邻叶块完成区域扫描。1.索引叶块的争用//这是个什么概念,非并行服务器下不会产生?2.所以不能通过搜索相邻叶块完成区域扫描。//既然不能加速查询,那为什么还要用到他呢?
      

  3.   

    不是太清楚,没具体分析过dump(太深入了)
    块在块头有个参数MAXTRAN负责管理多少个事务可以并行访问的,比如假设1.那么一旦一个请求来访问这个块中的数据,则块头就记录TRAN设置为1(象C++的CriticalSection).在这个请求完成前,其他事务如果也来了,那它们必须排对等着.也就是块的争用,索引叶块的争用也类似.
    这就是我的理解,如果有不对请包涵.有些概念还是比较混淆.所以不能通过搜索相邻叶块完成区域扫描。//因为物理上不是放在相邻的块上,只能跳跃性扫描.