Как я могу улучшить производительность метода усреднения в SQL?

У меня проблемы с производительностью, когда 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 или что-то в этом роде, мой вопрос в том, есть ли способ сделать это полностью с помощью оптимизаций стороны БД, таких как индексы.

5
задан Unreason 15 December 2010 в 14:34
поделиться