我最近查询遇到一问题:
一张表table1 里面很字段,其中有两个字段:字段A,字段B,都有建普通索引(Normal);其中B字段重复值比较多,
我用这两个字段去查询速度很慢(where 字段a>= 时间 and 字段a< 时间 and 字段B = 值),表大概有2千万数据量;
我发现如果单独用里面一个字段查询速度很快,但两个同时用就变慢了;
我想优化想不出好方法,请高手指点,谢谢!!!

解决方案 »

  1.   

    想办法屏蔽掉一个索引。比如:在字段A上加一个函数
    where TO_CHAR('字段a','YYYY-MM-DD')>= 时间 and TO_CHAR('字段a','YYYY-MM-DD')< 时间 and 字段B = 值
      

  2.   

    速度主要应该耽误在【字段B = 值】上,看你的描述 字段B 中重复数据很多,所以建一个位图索引上去,速度应该就会快很多的(有重复数据很多的情况下普通索引不会起太大的作用,把它删除掉)。
    create bitmap index t1_index on table1(字段B);
      

  3.   

    关键看执行计划,然后分析。
    1、查看执行计划,
    2、看a和b检索是否利用了index。
    3、如果都用了index检索,那么在b上用位图索引看看。
    ...
      

  4.   

    我按 F5 里面看到 字段a 索引没有用到,只用到字段b索引,后来我把字段b索引屏蔽掉后速度快了很多,用“+0”可以屏蔽掉索引(where 字段a>= 时间 and 字段a < 时间 and 字段B+0 = 值);
      

  5.   


    因为你的B重复值太多了吧?B的取值范围大概有多少?比如你的2kw数据里面B的可能值只有1k,那还是别建普通索引了还快些,或者像楼上说的建个位图索引试试。