这两个SQL语句哪个执行效率更高?请说明原因,其中testDATE为日期型字段,并且是索引。strDate是String变量。
select * from test a where a.testDATE < to_date('" + strDate + "', 'yyyy/mm/dd hh24:mi:ss')
select * from test a where to_char(a.testDATE,'yyyy/mm/dd hh24:mi:ss') < '" + strDate +"'"

解决方案 »

  1.   

    肯定是第一个,因为第一个使用了索引,而第二个a.testDATE使用了to_char,导致索引无效
      

  2.   

    先分析表,再set autotrace on,把执行计划贴出来看看。
      

  3.   

    要看表中testDATE的值小于strDate的记录数占总记录的比率,如果比率很大(如超过10%),那么这时不用索引会更好些。
      

  4.   

    如果 where 条件的选择性比较高(即 where 条件过滤掉的记录数的百分比大)的话,使用索引的执行计划的性能会比较好,反之,使用索引的执行计划反而会降低性能。
      

  5.   

    我从试过的,一共1千万多条记录,用第一个SQL语句耗时34分钟,而第二个SQL居然不到两秒钟!真是奇怪了!