Почему такая огромная разница в производительности между этими двумя запросами?
-- (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 миллионов строк.
Почему оптимизатор выбрал для них столь явно отличающийся (и в одном случае ужасный) план?
eqpid
? Является ли комбинированный индекс сeqpid
в списке столбцов? Если это так, то Oracle может подумать, что это неэффективный индекс типов для использования, и поэтому он наказывает этот план. - person btilly   schedule 02.06.2011