Вообще говоря, создайте индексы для столбцов, участвующих в предложении where
. Как вы описали, индексирование type
столбца может помочь.
Это действительно поможет? Кто знает ... проверьте объясните план. Соберите статистику для таблицы, чтобы Оптимизатор знал, что делать (т.е. выбирал лучший план выполнения). Тогда вы сможете понять, что делать.
Более того, кажется, что вы заставляете Oracle выполнять неявные преобразования. Сказать, что
some_date >= '12-mar-18'
означает, что - если some_date
тип данных столбца date
(похоже, что это так; в противном случае вы получите неправильный результат) - Oracle должен преобразовать строку '12-mar-18'
в действительный date
путем применения маски правильного формата (например, dd-mon-yy
). Почему вы хотите это сделать? Обеспечьте date
ценность для себя!
some_date >= date '2018-03-12'
или
some_date >= to_date('12-mar-18', 'dd-mon-yy')
Но будьте осторожны; mar
означает «март». Этот запрос, безусловно, потерпит неудачу в моей базе данных, которая говорит на хорватском, и у нас здесь нет 1030 * месяцев (это ožu
). Возможно, Вы бы предпочли придерживаться здесь чисел, то есть 12-03-18
. Еще одно замечание: это значение трудно понять; что такое 12
? Это 12-й день месяца или декабрь? То же самое касается 03
. Поэтому всегда используют значения, которые не вызывают путаницы, либо предоставляя литералы даты (которые всегда в формате yyyy-mm-dd
- тот, который я предложил первым), либо используйте функцию to_date
с соответствующей маской формата.