Я выполняю запрос, который возвращает мне коллекцию объектов дат по месяцам между определенным диапазоном дат. Запрос работает нормально, но очень медленно (~ 2 секунды на моей локальной машине, ~ 30 в нашей корпоративной среде разработки). Вот оно:
SELECT ADD_MONTHS(TO_DATE('200804', 'YYYYMM'), -1+rownum) AS MONTH
FROM all_objects
WHERE ADD_MONTHS(TO_DATE('200804', 'YYYYMM'), -1+rownum) <= TO_DATE('200805', 'YYYYMM')
В настоящее время он вернет только один месяц, но если вы расширите вторую строку даты, он вернет больше.
У меня два вопроса. Во-первых, почему это работает так медленно? Я знаю, что функции Oracle действительно замедляют запрос, но на моей машине разработки это занимает около 30 секунд.
Второй, более загадочный вопрос: почему время выполнения сокращается до доли секунды, когда вы расширяете диапазон, скажем, до «201805»? Я думаю, что больший диапазон займет больше времени. Вроде бы обратный эффект.