У меня проблемы с производительностью, когда SQL-запрос, вычисляющий среднее значение столбца, постепенно замедляется по мере увеличения количества записей. Есть ли тип индекса, который я могу добавить в столбец, который позволит быстрее вычислять среднее значение?
Речь идет о PostgreSQL, и я знаю, что этот конкретный тип индекса может быть недоступен, но меня также интересует теоретический ответ, даже если это возможно без какого-либо решения для кэширования.
Чтобы быть более конкретным, рассматриваемые данные, по сути, представляют собой журнал с таким определением:
table log {
int duration
date time
string event
}
I ' m выполняет запросы наподобие
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 или что-то в этом роде, мой вопрос в том, есть ли способ сделать это полностью с помощью оптимизаций стороны БД, таких как индексы.