Мне нужна помощь, чтобы улучшить этот SQL-оператор. Время выполнения составляет около 125 мс.
Во время выполнения моей программы этот sql (лучше: одинаково структурированные sqls для разных таблиц)
будет вызываться 300.000 раз.
Среднее количество строк в таблицах составляет около 10.000.000 строк, и новые строки (обновления / вставки) будут добавляться с отметкой времени каждый день. Данные, которые интересны для этой конкретной экспортной программы, находятся за последние 1-3 дня. Может быть, это полезно для создания индекса. Данные, которые мне нужны, это текущая действительная строка для данного идентификатора и предшественник datarow для получения обновлений (если существует).
Мы используем базу данных Oracle 11g и Dot.Net Framework 3.5
SQL-оператор для повышения:
select
ID_SOMETHING, -- Number(12)
ID_CONTRIBUTOR, -- Char(4 Byte)
DATE_VALID_FROM, -- DATE
DATE_VALID_TO -- DATE
from
TBL_SOMETHING XID
where
ID_SOMETHING = :ID_SOMETHING
and ID_CONTRIBUTOR = :ID_CONTRIBUTOR
and DATE_VALID_FROM <= :EXPORT_DATE
and DATE_VALID_TO >= :EXPORT_DATE
order by
DATE_VALID_FROM asc;
Здесь я загрузил текущий План объяснения для этого запроса.
Я не эксперт по базам данных, поэтому я не знаю, какой тип индекса лучше всего подходит для этого требования.
Я видел, что есть много различных возможных типов индекса, которые могут быть применены.
Возможно, подсказки Oracle Optimizer тоже полезны.
У кого-нибудь есть хорошая идея для настройки этого sql или может указать мне правильное направление?