SQL - 优化大表的日期计算

时间:2012-07-27 15:42:30

标签: sql oracle query-optimization

下面的查询可以优化吗?

select
     max(date), sysdate - max(date)
 from
     table;

查询执行时间~5.7秒

我有另一种方法

select
    date, sysdate - date
from
    (select * from table order by date desc)
where
    rownum = 1;

查询执行〜7.9秒

在这种特殊情况下,表格大约有17,000,000个条目。

有没有更好的方法来重写它?

更新:嗯,我尝试了一些你在数据库开发中建议的提示,尽管它的子集比原来的小(大约1,000,000条记录)。如果没有索引,查询的运行速度会慢于索引。

第一个查询,没有索引:~0.56秒,索引:~0.2秒。第二个查询,没有索引:~0.41秒,索引:~0.005秒。 (这让我感到惊讶,我认为第一个查询会比第二个查询运行得更快,也许它更适合于较小的记录集。)

我向DBA建议这个解决方案,他将更改表结构以适应这个,然后我将用实际数据测试它。感谢

2 个答案:

答案 0 :(得分:3)

日期栏上是否有索引?

答案 1 :(得分:1)

该查询非常简单,除了在日期列上添加索引之外,可能无法对其进行优化。这个数据库是什么?并且是sysdate表的另一列吗?