Play Framework 1.2.5 で書かれたアプリケーションがあり、H2 ファイルをデータベースとして使用しています。
アプリケーションには、1 日あたり約 1000 行を取得する「Sales」テーブルがあります。そこには約 5 年間のデータがあります (通常は 2 ~ 3 年間のデータが利用可能です) ので、基本的に、テスト マシンには 150 万以上のデータを含むテーブルがあります。
私の問題は、クライアントが「日付とグループ bu 製品タイプと販売タイプの間の合計売上高を教えてください」のようなデータを要求することです。だから私は2つのグループと日付範囲を持つ選択クエリのようなものを作る必要があります.
テーブルが大きくなるにつれて、選択クエリのパフォーマンスが劇的に低下します。より良い結果を得るにはどうすればよいですか?
時間別、日別、月別などの売上を集計した別のテーブルを作成しましたが、売上テーブルから検索する関数があります。
最初のアプリケーションは、c# (asp.net webservice) とデータベースとしてストアド プロシージャを使用する ms-sql サーバーで作成され、これらの操作は数秒で完了しました。クエリを高速化する集計テーブルを使用していなかったとしても、データについてはほぼ同じでした。
専用サーバー アプリケーションは組み込みサーバーよりも常に高速であることはわかっていますが、このクエリのパフォーマンスを向上させる方法が必要だと思います。
H2 エンジンで実行できる最適化はありますか。
同時実行の問題のため、H2 サーバーで「MVCC」を有効にする必要がありましたが、これはパフォーマンスの問題でしょうか?
読んでいただき、お時間を割いていただきありがとうございます。
* *編集 Play Framework 1.2.x を使用している場合:
インデックスに追加したい各列に @Index(name="sales_columnname_index") 注釈を追加したところ、H2 エンジンは古い mssql+asp.net アプリケーションよりも高速に動作するようになりました。