建以下两个索引
索引1:A, B, C, D, E, F, G
索引2:B
select *
          from tbl1 where A='I' and B='A' and  C>'D' and D>=0
          and E ='A'
          and F=:p and G=:q;
为什么执行以上语句时使用第二个索引,不使用第一个索引
我本想让他用第一个复合索引的
(如果索引2为C,则执行以上语句使用第一个索引)

解决方案 »

  1.   

    写出A, B, C, D, E, F, G字段的数据类型
      

  2.   

    A CHAR(1)
    B CHAR(1)
    C CHAR(1)
    D  NUMBER(12,2)
    E  CHAR(4)
    F CHAR(8)
    G CHAR(4)
      

  3.   

    你这个语句系统会优先使用索引2,可以使用索引提示强制系统使用索引1:
    索引提示格式:在select关键字之后使用/*+... */
    你的查询语句就变为:
    select /*+index(索引1的名称)*/ *
              from tt where A='I' and B='A' and  C>'D' and D>=0  and E ='A'  and F='e' and G='f';
      

  4.   

    select /*+index(索引1的名称)*/ *
              from tbl1  where A='I' and B='A' and  C>'D' and D>=0  and E ='A'  and F='e' and G='f';
      

  5.   

    以上是我测试的语句给你贴出来了,你的语句应该是下面的:
    select  /*+index(索引1的名称)*/ *
              from tbl1 where A='I' and B='A' and  C>'D' and D>=0
              and E ='A'
              and F=:p and G=:q;
      

  6.   

    谢谢
    其实是from viewname现在是
    在使用视图时使用hint不管用,而且在创建索引时也不能使用hint,因为很多地方使用该视图时还有很多where条件不相同