我有一个相当大的表,其中一列是日期列。我执行的查询如下。
select max(date) from tbl where date < to_date('10/01/2010','MM/DD/YYYY')
也就是说,我想找到最接近且小于特定日期值的单元格值。由于大桌子上的最大值,这需要相当长的时间。有更快的方法吗?也许使用LAST_VALUE?
答案 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