4

下面这个查询可以优化吗?

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 建议了这个解决方案,他将更改表结构以适应此问题,然后我将使用实际数据对其进行测试。谢谢

4

2 回答 2

3

日期列上是否有索引?

于 2012-07-27T15:45:49.943 回答
1

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

于 2012-07-27T15:47:44.157 回答