Sin*_*son 5 sql postgresql performance
我遇到了一些性能问题,其中计算列平均值的SQL查询随着记录数量的增长而逐渐变慢.是否有可以添加到列的索引类型,以便更快地进行平均计算?
有问题的数据库是PostgreSQL,我知道特定的索引类型可能不可用,但我也对理论答案很感兴趣,天气甚至没有某种缓存解决方案.
更具体地说,有问题的数据本质上是一个具有这种定义的日志:
table log {
int duration
date time
string event
}
Run Code Online (Sandbox Code Playgroud)
我正在做类似的查询
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
Run Code Online (Sandbox Code Playgroud)
第二个总是相当快,因为它具有更严格的WHERE子句,但总平均持续时间1是导致问题的查询类型.我知道我可以缓存这些值,使用OLAP或其他东西,我的问题是天气有一种方法我可以完全通过数据库方面的优化,如索引来做到这一点.
计算平均值的性能总是会越慢,记录越多,总是必须使用结果中每条记录的值.
如果索引包含的数据少于表本身,则索引仍然可以提供帮助.为您想要平均值的字段创建索引通常没有帮助,因为您不想进行查找,您只想尽可能高效地获取所有数据.通常,您将该字段作为输出字段添加到查询已使用的索引中.