標題の件でご質問させていただきます。
レコード数100万件、カラム数30くらいあるテーブルのデータを複数のビューで
クロス集計クエリをしています。単にクエリを表示するのにかなりの時間がかかります。
ご相談は、このクエリがタブで5つほど、フォームのレコードソースに設定されており、
フォームを開いて表示する際に、パフォーマンスが悪いです。
クロス集計クエリではなく通常の選択クエリであれば、VBAでレコードソースを設定する際、
データが抽出されない条件を初期設定などして、必要なタイミングでコマンドボタンクリック時
のイベントプロシージャで表示させることなどできますが、クロス集計クエリではうまくいきません。
どのような方法で対処可能かご教授願えますでしょうか。
それはそうでしょう。詳しくないですが、Excel風に印刷したい時など、その場限りで使うものではないでしょうか。クロス集計結果をメイン画面に表示して普段使うならば、Excelでデータベースを組むでしょう。
時間と労力を費やしてその場凌ぎではどうにもならないと思います。個人の意見なので、解決策が他にあるかもしれませんが。
テーブルに適切なインデックスは設定されているでしょうか。
列見出しに設定するフィールド、抽出条件を設定するフィールド、並べ替えを設定するフィールドにインデックスを設定してみてください。
複数のテーブルを結合しているなら結合フィールドにもインデックスを設定してみてください。
フォームに関しては、デザインビューでは、タブの最初に表示されいるページのみにソースオブジェクトを設定しておいて、ページを変更したときにそのページのソースオブジェクトを設定するという方法が考えられます。
コード例
りんご様
前提をお話していませんでしたが、表示するだけではなく、60万件ほどの初期レコードに対し、
UI上に演算等をするコマンドボタンが10数個あり、レコードを追加、削除、演算をし、結果として、
集計結果(100万件)をクロス集計クエリを表示する仕様です。
hatena様
インデックスは早速試しました、体感レベルですが少なからずパフォーマンス改善したように思います。
SourceObjectを空にしておいて、タブの移動で計算させるというのは、パフォーマンス改善にかなり有効でした。
どうもありがとうございました。