Вы не сравниваете даты, вы сравниваете строки. Предполагая, что voyage
имеет тип DATE
, он приводится к строке (используя любой формат даты по умолчанию в вашей базе данных или сеансе) для сравнения со строковыми литералами, которые вы предоставляете в запросе. Это может вызвать все виды сумасшествия в оптимизаторе запросов Oracle.
Я предлагаю вам явно преобразовать строки в даты, например ::10000
VOYAGE >= TO_DATE('07-JUL-15','DD-MON-YY')
или используйте литералы даты, например ::10000
VOYAGE >= date '2015-07-07'
Это может или не может улучшить производительность вашего запроса, но с предоставленной вами информацией, это мой лучший совет. Задавая вопросы о производительности запросов в Oracle, более полезно включить фактическое определение таблицы / представления, любые индексы, присутствующие в таблицах, и фактический план выполнения запросов, который использует Oracle.
(Кроме того, я только что заметил, что ваше представление включает в себя оператор DISTINCT. Это часто не способствует хорошей производительности запросов. Пожалуйста, подумайте, не использовали ли вы DISTINCT, чтобы скрыть какой-то логический недостаток в определении представления, приводящий к тому, что он создает дубликаты. )