SQL - 优化大表的日期计算

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

最佳答案

日期列上有索引吗?

关于SQL - 优化大表的日期计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11691216/

相关文章:

sql - Oracle SQL 中最小值但不为 NULL

sql-server - 如何将 Oracle 多参数子查询转换为 MS SQL 子查询

mysql - 使用 DISTINCT 优化 mysql 查询 Suppliers <-> Products <-> Categories

mysql - 优化 MariaDB 中的 1 次 SQL 更新语句

sql - 如果oracle数据库中的某个表是空表统计的,那么如何恢复该表的原始统计信息呢?

添加sql行时的Android通知

sql - 开始和结束时间——每小时/每天/每周有多少并发事件等

sql - "Running Product"PostgreSql 中的聚合/窗口函数?

oracle - 如何更改 APEX 中区域的高度

sql - 从存储过程中写出 HTML 并通过电子邮件发送