Ускорение запросов GROUP BY, SUM и AVG
Таблица arg_rec содержит 800K строк на моем тестовом компьютере, обычно эта таблица содержит более 15 миллионов строк. Я хочу выполнить следующий запрос:
SELECT STE_ID, PNT_NO, YR, MN, AVG(AVR_WS) AS AVR_WS, SUM(AVR_PW) FROM arg_rec GROUP BY STE_ID, PNT_NO, YR, MN;
Этот запрос дает среднесуточную скорость ветра и общую мощность по данным ветряных турбин. На моей тестовой машине этот запрос прерывается после 10 минут выполнения с комбинированным индексом наSTE_ID
, PNT_NO
, YR
, MN
, который является только подмножеством столбцов первичного ключа. Без индекса запрос завершается через несколько минут.
Я использую стандартную установку MySQL, в дополнение к настройке сервера, я также хотел бы узнать больше о других способах решения этой проблемы, таких как:
Is it possible to create a view based on this query and cache the results ? Are there more advanced indexing features to encapsulate the fact that YR, MN, DY, HR, MI, SC correspond to year, month, day etc field of the record timestamp ? Am I better off just duplicating the data using the business layer of my application ?