Большая разница в производительности: использование sysdate и использование предварительно отформатированной даты

Почему между этими двумя запросами такая огромная разница в производительности?

-- (89 seconds)
SELECT max(mydate) FROM mytable WHERE eqpid = 'ABCDEFG'
AND mydate < sysdate - 5

vs.

-- (0.6 seconds)
SELECT max(mydate) FROM mytable WHERE eqpid = 'ABCDEFG'
AND mydate < TO_DATE('05/27/2011 03:13:00', 'MM/DD/YYYY HH24:MI:SS') -- 5 days ago

Независимо от индексов, кажется, что и to_date, и sysdate просто возвращают «некоторое значение даты».

Примечания : В этой таблице существует составной индекс, включающий eqpid и 2 других столбца. Также существует индекс для mydate. Оба являются b-деревом. Всего около 29 миллионов строк.

Почему оптимизатор выбрал для них такой явно другой (а в одном случае ужасный) план?

8
задан Charles Burns 1 June 2011 в 21:24
поделиться