我正在遇到一些性能问题,当记录数量增加时,计算列平均值的SQL查询会逐渐变慢。是否有一种索引类型可以添加到该列中,以便更快地进行平均值计算?
所涉及的DB是PostgreSQL,我知道特定的索引类型可能不可用,但我也对理论答案感兴趣,即是否可以在没有某种缓存解决方案的情况下实现这一点。
更具体地说,所涉及的数据本质上是具有以下定义的日志:
第二个查询速度通常较快,因为它有一个更严格的WHERE子句,但总平均持续时间查询是导致问题的查询类型。我知道我可以使用OLAP或其他方法缓存值,但我的问题是是否有一种方式可以完全通过数据库端优化(例如索引)来解决这个问题。
所涉及的DB是PostgreSQL,我知道特定的索引类型可能不可用,但我也对理论答案感兴趣,即是否可以在没有某种缓存解决方案的情况下实现这一点。
更具体地说,所涉及的数据本质上是具有以下定义的日志:
table log {
int duration
date time
string event
}
我正在执行查询,类似于
SELECT average(duration) FROM log WHERE event = 'finished'; # gets average time to completion
SELECT average(duration) FROM log WHERE event = 'finished' and date > $yesterday; # average today
第二个查询速度通常较快,因为它有一个更严格的WHERE子句,但总平均持续时间查询是导致问题的查询类型。我知道我可以使用OLAP或其他方法缓存值,但我的问题是是否有一种方式可以完全通过数据库端优化(例如索引)来解决这个问题。
event
和data
创建一个索引,并将duration
作为输出字段。这样查询就可以使用索引的输出进行平均计算。 - Guffa