Я работаю на столе, который имеет 3008698
строкиесть хитрый способ оптимизировать этот запрос
exam_date
является DATE
поля.
Но запросы, которые я запускаю, хотят соответствовать только части месяца. Так что я делаю:
select * from my_big_table where to_number(to_char(exam_date, 'MM')) = 5;
, который, как я считаю, длится долго из-за функции на колонке. Есть ли способ избежать этого и сделать его быстрее? кроме внесения изменений в таблицу? exam_date
в таблице имеют разные значения даты. как 01-OCT-10 или 12-OCT-10 ... и так далее
Планы SQL и SQL-команд harfor SQL помогут вам. Убедитесь, что статистика ваших таблиц актуальна – cagcowboy
Основной вопрос, но действительно ли таблица имеет индекс на exam_date? (Тот факт, что ваша производительность отличается при выполнении проверки диапазона, предполагает, что она делает). Замечания APC о сканировании в полноэкранном режиме важны - если ваши данные равномерно распределены через 12 месяцев, и вам нужно вернуть 1/12 из 3008698 строк, то, вероятно, лучше всего сканировать полный стол, а также много данных. Один из способов ускорить полномасштабное сканирование - это посмотреть на/* + PARALLEL */hint Oracle (который делит полное сканирование на ваши процессоры), но есть затраты на повторную сборку результатов. – JulesLt