Запрос агрегируется быстрее, чем MAX - PullRequest
1 голос
/ 25 ноября 2011

У меня довольно большая таблица, в которой один из столбцов является столбцом даты.Запрос, который я выполняю, выглядит следующим образом.

select max(date) from tbl where date < to_date('10/01/2010','MM/DD/YYYY')

То есть я хочу найти значение ячейки, наиболее близкое и меньшее определенного значения даты.Это занимает значительное время из-за максимума на большом столе.Есть ли более быстрый способ сделать это?возможно используя LAST_VALUE?

Ответы [ 3 ]

4 голосов
/ 25 ноября 2011

Поместите индекс в столбец даты, и запрос должен быть достаточно быстрым.

3 голосов
/ 25 ноября 2011

1) Добавить индекс в столбец даты. Проще говоря, индекс позволяет ядру базы данных хранить информацию о данных, поэтому он ускоряет большинство запросов, где этот столбец является одним из предложений. Информация здесь http://docs.oracle.com/cd/B28359_01/server.111/b28310/indexes003.htm

2) Рассмотрите возможность добавления второго условия в запрос. У вас есть where date < to_date('10/01/2010','MM/DD/YYYY') сейчас, почему бы не изменить его на:

where date < to_date('10/01/2010','MM/DD/YYYY') and date > to_date('09/30/2010', 'MM/DD/YYYY')

, поскольку это уменьшит количество отсканированных строк.

1 голос
/ 25 ноября 2011

Попробуйте

select date from (
    select date from tbl where date < to_date('10/01/2010','MM/DD/YYYY') order by date desc
) where rownum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...