t.policy_start_date <= to_date('$appDateEndToEndTimeString$','yyyy-MM-dd hh24:mi:ss') t.policy_start_date < to_date('$appDateEndToEndTimeString$','yyyy-MM-dd hh24:mi:ss') t.policy_start_date < #appDateEndToEndTimeString#t.policy_start_date <= #appDateEndToEndTimeString#
这几个哪个效率高?1、等号:加不加等号是否影响效率
2、直接以日期类型进行查询好,还是用TO_DATE进行转换效率好。

解决方案 »

  1.   

    select 的where条件中,如果出现字段和值类型不同,则将字段的类型转换为值的类型;而不是将值的类型转换为字段的类型。
    比如:
    select * from table where f1 = 1 => select * from table where to_number(f1) = 1;
    也就是说这里的隐式转换规则可能导致f1上的索引无效。
      

  2.   

    如果policy_start_date 是DATE类型(我见过有的用VARCHAR2的),还是先用TO_DATE转换好
      

  3.   

    1、>= 要比 > 效率高,同样 <= 要比 < 效率高
    2、最好不要让Oracle做隐式转换,这样效率低下,并且如果该列上创建了索引的话,索引会失效,也就时说会全表扫描
      

  4.   

    追求查询效率的话,把日期型改为number。把日期转换为 UTC形式。
      

  5.   

    =号可以用上索引,<>用不上索引
      

  6.   

    我用1210769条数据查询测试过t.policy_start_date < #appDateEndToEndTimeString#t.policy_start_date <= #appDateEndToEndTimeString#这中方式效率比较高的!