Это один из тех случаев, когда нет смысла пытаться оптимизировать производительность СУБД, не зная, что означают ваши данные.
Есть ли у вас много разных значений CREATED_DATE и несколько строк в вашей DT для каждой даты? Если это так, вам нужен индекс CREATED_DATE, так как СУБД будет основным способом отклонять столбцы, которые она не хочет обрабатывать.
С другой стороны, у вас есть только несколько дат и много разных значений REF_TXT или ALT_REF_TXT? В этом случае вы, вероятно, имеете правильный выбор составного индекса.
Наличие OR в вашем запросе сильно усложняет ситуацию и выбрасывает большинство догадок в окно. Вы должны посмотреть на EXPLAIN PLAN, чтобы увидеть, что происходит.
Если у вас есть десятки миллионов различных значений REF_TXT и ALT_REF_TXT, вы можете рассмотреть возможность денормализации этой схемы.
Изменить.
Спасибо за дополнительную информацию. В вашем плане объяснения нет курящих пистолетов, которые я вижу. Несколько вещей, которые можно попробовать дальше, если вы еще не довольны производительностью.
Изменение порядка столбцов в ваших составных индексах в таблицах данных. Возможно, это поможет вам более просто сканировать диапазон индекса, а не заниматься бизнесом с растровыми обезьянами.
Обменяйте SELECT * на имена столбцов, которые вам действительно нужны в наборе результатов запроса. В любом случае это хорошая практика программирования, и она МОЖЕТ позволить оптимизатору избежать какой-либо работы.
Если что-то все еще слишком медленно, попробуйте преобразовать это как СОЮЗ из двух запросов, а не с помощью ИЛИ. Это МОЖЕТ позволить части alt_ref_txt вашего запроса, которая немного усложняется всеми значениями NULL в этом столбце, оптимизироваться отдельно.