表day_subtotal有两个索引day_number,user_id,def_id
使用查询select * from day_subtotal where user_id=**** and def_id=**速度很快。
但加上day_number字段的判断,就速度非常的慢。
请问这是怎么回事,该怎么调优呢?
谢谢。

解决方案 »

  1.   

    你在PLSQL Developer分别用F5看看,两句话用到的索引有什么区别
      

  2.   

    再在day_number上创建个索引吧
      

  3.   

    ORACLE采用自下而上的顺序解析WHERE子句
    你可以把day_number放在前面,如select * from day_subtotal where day_number=xxx and user_id=**** and def_id=**
    这样速度应该没什么影响。
    另外还要注意day_number这个字段的类型,如果day_number是varchar型的
    你却这样写
    select * from day_subtotal where day_number=123;
    这样的话将会很慢。
    正确写法是要类型匹配
    select * from day_subtotal where day_number='123'
      

  4.   

    好久才来结贴。
    最后发现了day_number字段为按日期的分区。当同时使用分区与多个索引进行查询时就会先通过分区查询。