最近在改一个比较复杂的SQL语句,因为比较慢。
在测试过程中,发现了一个怪问题。
部分SQL语句如下:
如果是下面的这句,速度很快。
AND MO_NUMBER IN (
SELECT MO_NUMBER FROM TABLE1 WHERE 1=1
AND (TO_CHAR(OUT_TIME,'YYYY/MM/DD HH24:MI:SS') BETWEEN '2013/07/18 07:30:00' AND '2013/07/25 10:28:56')
)
如果是下面的这句,速度非常慢。
AND MO_NUMBER IN (
SELECT MO_NUMBER FROM TABLE1 WHERE 1=1
AND OUT_TIME BETWEEN TO_DATE('2013/07/18 07:30:00', 'YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2013/07/25 10:28:56','YYYY/MM/DD HH24:MI:SS')
)
在我的印象中,第二条语句应该快啊,因为第一条语句BETWEEN前面有用TO_CHAR,这样应该慢吧。但实际上却是很快。
------解决方案--------------------
我建议你看看执行计划,涉及到优化的,执行计划是一个很重要的概念。
------解决方案--------------------
把你建索引的字段名加到条件中,这样就走索引。