如何使用group by statement + max函数加速SQL查询?

时间:2009-11-15 22:20:49

标签: sql oracle

我有一个包含数百万行的表,我需要做很多类似的查询:

select max(date_field) 
where varchar_field1 = 'something' 
group by varchar_field2;

我的问题是:

  • 有没有办法创建索引来帮助解决这个问题?
  • 我有哪些(其他)选项可以增强此查询的效果?

3 个答案:

答案 0 :(得分:15)

(varchar_field1, varchar_field2, date_field)上的索引最常用。数据库可以使用where子句的第一个索引字段,group by的第二个索引字段,以及计算最大日期的第三个索引字段。它可以仅使用该索引完成整个查询,而无需查找表中的行。

答案 1 :(得分:0)

显然,varchar_field1上的索引会有很多帮助。

答案 2 :(得分:-1)

您可以使用列

创建一个额外的表
  varchar_field1  (unique index)
  max_date_field 

您可以在要搜索的表上设置插入,更新和删除触发器以维护此小表 - 无论何时添加或更改行,都要在此表中设置一行。

使用这种重构技术,我们在性能改进方面取得了很大成功。在我们的例子中,它变得更简单,因为我们永远不会删除表中的行,直到它们太旧以至于没有人查找最大字段。如果您可以将max_date_field添加到其他表而不是创建新表,这是一种特别有用的技术。