いいえ、関数自体を高速化することはできません。ここでの問題は、実際には730万レコードを選択していることです。 MySQLはテーブル全体をスキャンする必要があり、730万はかなり大きな数です。実際、これほど速く終了することに感銘を受けました。
採用できる戦略は、データをより小さなサブセットに分割し(おそらく日付ごと、月ごと?)、変更されない古いデータの合計を維持することです。合計を定期的に更新できます。全体の値は、合計と、それ以降に追加された新しいデータを追加することで計算できます。これにより、行数が大幅に少なくなります。