查询聚合比MAX快

时间:2011-11-25 13:03:46

标签: sql oracle

我有一个相当大的表,其中一列是日期列。我执行的查询如下。

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

也就是说,我想找到最接近且小于特定日期值的单元格值。由于大桌子上的最大值,这需要相当长的时间。有更快的方法吗?也许使用LAST_VALUE?

3 个答案:

答案 0 :(得分:4)

在日期列上放置一个索引,查询应该足够快。

答案 1 :(得分:3)

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')

因为这会减少扫描的行数。

答案 2 :(得分:1)

尝试

select date from (
    select date from tbl where date < to_date('10/01/2010','MM/DD/YYYY') order by date desc
) where rownum = 1