Ваш выбор, когда вы публикуете его, будет читать 99% всей таблицы (2013-12-31 всего лишь неделю назад, и я предполагаю, что большинство записей до этой даты и только очень немного после). Если в вашей таблице много больших столбцов (например, varchar2 (4000)), все эти данные также будут прочитаны, когда оракул сканирует таблицу. Таким образом, вы можете прочитать несколько килобайт каждой строки, чтобы получить 30 байтов, которые вам нужны для суммы и трансляции.
Если у вас есть этот сценарий. создать комбинированный индекс transdate и amountcur:
CREATE INDEX myindex ON custtrans(transdate, amountcur)
с комбинированным индексом, оракул может читать индекс, чтобы выполнить запрос и не трогать основную таблицу на все, что может привести к значительно меньше данных который необходимо прочитать с диска.
Опубликовать объяснение плана того же. Он дает больше света. – SriniV
1. Определите навсегда. Это секунды, минуты, часы? 2. Не ретранслируйте неявное преобразование типов данных, когда-либо. В вашей ситуации используйте функцию 'to_date()', чтобы преобразовать буквенный символ символа, представляющий дату, в значение типа данных data. поэтому ваш предикат может выглядеть так: 'где a.transdate <= to_date ('2013-12-31', 'yyyy-mm-dd')' или 'where a.transdate <= date '2013-12-31' '. Кроме того, всегда полезно предоставить немного больше информации о том, насколько велика ваша таблица, каков план выполнения, есть ли какие-либо индексы и т. Д. –
@NicholasKrasnov Вы читали мой разум :) – SriniV