今天发现一个奇怪的问题,找了大量资料没有找到原因只有在这求助了
在一张user表里有个整型字段importance,在上面我建立了索引
select * from user where importance = 1
索引生效select * from user where importance >=1 and importance <=1 索引不起作用希望各位老大赐教

解决方案 »

  1.   

    try:
    analyze   table   table_name(索引基表)   delete   statistics;
      

  2.   

    怎么没人 啊,我怎么判断目前是基于rbo还是cbo,如果改为cbo是不是过段时间就要手动对执行对应的分析语句进行统计
      

  3.   

    你建索引前有没有执行过该sql, 如果执行过的话,SQL的执行会保存到sharepool里去, 要先清除sharepool。
      

  4.   

    楼主怎么知道index有没生效?
      

  5.   

    SELECT * FROM TBEMP WHERE CODE>=6 AND CODE<=6执行计划:SELECT STATEMENT, GOAL = CHOOSE
     TABLE ACCESS BY INDEX ROWID Object owner=SYSTEM Object name=TBEMP
      INDEX RANGE SCAN Object owner=SYSTEM Object name=IX_TBEMPCODE 查询速度test: DECLARE
       i integer ;
       sex char(2) ;
       vname varchar(2000) ;
       d1 date ;
       d2 date ;
       
    begin
     d1 := sysdate ;
     SELECT name into vname FROM TBEMP WHERE  code>=1111111 and code<=1111111 ;
     d2:=sysdate ;
     dbms_output.put_line(vname) ;
     dbms_output.put_line('用时:'||((d2-d1)*3600*24)||'秒') ;
     
    end ; 用时0.014秒
      

  6.   

    上述表200万条记录,CPU2.6+Memory1G
      

  7.   

    我觉得不是索引没有起作用,而是时间稍微大了一点select * from user where importance = 1
    是直接通过索引找到=1的记录select * from user where importance >=1 and importance <=1 
    不仅要找到=1地记录,而且还要全表找到满足〉1,<1地记录
      

  8.   

    select * from user where importance >=1 and importance <=1 
    相当于全表扫描了嘛,索引应该是不起作用的啊~~~
      

  9.   

    不好意思,刚刚看错了~~~
    我测试了是起作用的,指定索引试试
     select /*+index(t,idx_importance)*/
     * from user t
     where importance >=1 and importance <=1
      

  10.   

    这种情况不会使用的。在很多sql优化中提到这样的情况。自己想想也能明白。 oracle并没有花费那么多的时间来给你分析条件的。