Вообще говоря, вы должны доверять оптимизатору информацию о его бизнесе, который оптимизирует производительность запросов. В частности, следует ожидать, что оптимизатор знает, когда будет полезно использовать индекс, а когда - нет. Если использование индекса не улучшит производительность запроса, оптимизатор не будет его использовать.
Итак, несколько вопросов к вам:
- Запрос выполняется слишком медленно? (Если нет, то почему вы беспокоитесь?)
- Что такое схема таблиц?
- Что такое индексы в таблицах?
- Каковы мощности рассматриваемых таблиц?
- Как именно выглядит полный запрос?
- Как выглядит план запроса?
- Какая пропорция строк в таблице удовлетворяет
shipment.end_alloc_date >= to_date(last week)
?
- Какая пропорция строк в таблице удовлетворяет
shipment.end_alloc_date <= to_date(next week)
?
Вы заметили, что эти условия не являются противоположностями друг другу? Я предполагаю, что это так, но это означает, что лучший план запроса для одного может отличаться от лучшего плана запроса для другого.
Оптимизатор будет учитывать ответы на вопросы 2-8 в этом списке и использовать свое суждение для выбора наилучшего способа ответа на запрос. Вы должны знать ответы на эти вопросы, если считаете, что оптимизатор не работает. Но без этой информации никто здесь не сможет оказать вам большую помощь, кроме смутного махания рукой «ищите подсказки оптимизатора в руководстве».