select * from  a where  f=0 and d>sysdate-3 order by id desc建立 f 和 d 字段的联合索引不起作用,好像因为d字段是范围查询,不走索引。
有什么好办法?

解决方案 »

  1.   

    你什么知道它不起作用呢?create index idx_tb on tb (f,d);
      

  2.   

    索引不会在SQL语句体现出来的,
    索引的作用在于提高查询效率,降低查询时的资源利用。
    一个基表不能建太多的索引; 
    空值不能被索引 
    只有唯一索引才真正提高速度,一般的索引只能提高30%左右。
    对表进行insert,update,delete处理时,由于要将表的存放位置记录到索引项中  而会降低一些速度。  
      

  3.   

    看是否走索引,用set autotrace on,查询后会显示执行计划,看看是不是用了索引.
      

  4.   


    从哪里来的观点?  可以这么说,不管是unique还是一般的普通index, 这不是区别性能的根本,通常来说,在同样的结果集返回率的情况下,3个左右的IO都能完成索引扫描,这不取决于是什么索引类型,而是取决于你的索引的构造,如CF和blevel等.当然还有CBO的选择,统计信息的差异.因此不是说提高30%还是多少,而是根据很多东西来决定的.  oracle中有太多的因素会影响你的查询.因此不能一概而论.
      

  5.   

    可以创建以下的索引:create index ind_fd on a(f,d);然后改写一下你的SQL语句:select * from a where f=0 and d>=sysdate-2 order by id desc;
      

  6.   

    试下这2种:
    create index ind_fd on a(f,d, id); create index ind_fd on a(f,d, id desc);