Sql 查询聚合速度快于MAX

Sql 查询聚合速度快于MAX,sql,oracle,Sql,Oracle,我有一个相当大的表,其中一列是日期列。我执行的查询如下 select max(date) from tbl where date < to_date('10/01/2010','MM/DD/YYYY') 也就是说,我想找到最接近或小于特定日期值的单元格值。这需要相当长的时间,因为大桌子上有最大值。有没有更快的方法?也许用最后的值 试试看 select date from ( select date from tbl where date < to_date('10/01/2

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

select max(date) from tbl where date < to_date('10/01/2010','MM/DD/YYYY')
也就是说,我想找到最接近或小于特定日期值的单元格值。这需要相当长的时间,因为大桌子上有最大值。有没有更快的方法?也许用最后的值

试试看

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


将索引放在日期列上,查询速度应该非常快。

将索引放在日期列上,查询速度应该非常快。

1将索引添加到日期列。简单地说,索引允许数据库引擎存储有关数据的信息,因此它将加速大多数查询,其中该列是子句之一。信息在此

2考虑向查询中添加第二子句。您现在有日期<截止日期'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')

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

1在日期列中添加索引。简单地说,索引允许数据库引擎存储有关数据的信息,因此它将加速大多数查询,其中该列是子句之一。信息在此

2考虑向查询中添加第二子句。您现在有日期<截止日期'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')


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

我不明白。你能详细说明一下吗?@Aks:不知道我该如何详细说明……那个专栏上有索引吗?@Aks:如果你在处理数据库,但不知道索引是什么,那么你就缺乏一些重要的基础知识。我只能建议你花半个小时左右的时间,读一章关于索引以及如何在PL/SQL中创建索引的内容。你能详细说明一下吗?@Aks:不知道我该如何详细说明……那个专栏上有索引吗?@Aks:如果你在处理数据库,但不知道索引是什么,那么你就缺乏一些重要的基础知识。我只能建议大家花半个小时左右的时间,阅读一章关于索引以及如何在PL/SQL中创建索引的主题。这也需要花费相当长的时间。但这个想法很有趣。谢谢这也需要很长时间。但这个想法很有趣。谢谢如果可能的话,我会对第一部分投+1票,对第二部分投-1票。@ypercube这一切都是关于上下文的:OP还没有意识到索引,我们都在某个时候出现过。在Stackoverflow上开始训练某人是不现实的,所以在此期间我提供了一个快速的胜利。如果Oracle的引擎由于添加了第二个子句而无法提供任何性能改进,那么我今天就了解了Oracle:第二个查询将不会返回任何行,因为9月30日和10月1日之间没有日期。我创建了一个索引,它非常棒。谢谢如果没有索引,就没有性能增益,但是性能损耗,因为引擎必须为每一行检查2个条件。如果可以的话,我会对第1部分的答案投a+1,对第2部分的答案投a-1。@ypercube这一切都是关于上下文的:OP还没有意识到索引,我们在某个时候都在那里。在Stackoverflow上开始训练某人是不现实的,所以在此期间我提供了一个快速的胜利。如果Oracle的引擎由于添加了第二个子句而无法提供任何性能改进,那么我今天就了解了Oracle:第二个查询将不会返回任何行,因为9月30日和10月1日之间没有日期。我创建了一个索引,它非常棒。谢谢如果没有索引,则不会有性能增益,但会有损失,因为引擎必须为每行检查2个条件。