2014年6月30日月曜日

MS Access の実行計画を参照する

Microsoft Access にもオプティマイザと統計情報はある。ただし最適な実行計画に誘導することはできないので、検索速度の不安定リスクは消えない。

Access 2000 でクエリを最適化する方法
http://support.microsoft.com/kb/209126/ja

MS Access における検索のパフォーマンス改善は、SQL について対策するのであれば Rushmore を使えるようにすることが第一の目標となる。オプティマイザが決定した実行計画を出力するには、レジストリのキーを設定することで操作できる。
SQLの実行毎に、showplan.out ファイルがユーザのマイ ドキュメント(C:\Users\UserName\Documents)もしくは、カレントディレクトリに出力されます。ここに using rushmore と出力されると、クエリの検索で Rushmore が使えたことが分かる。
  1. キーを追加する (※ Access 2007 の場合)
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Debug
  2. このキーに文字列値を追加する
    JETSHOWPLAN=ON
JETSHOWPLAN in Access2013 (※ Access 2013 の場合)
http://social.msdn.microsoft.com/Forums/office/en-US/b786a029-fa8c-4556-a40c-e749ba73499e/jetshowplan-in-access2013

出力例1(主キーの場合)

- Inputs to Query -
Table 'TEST_TABLE1'
- End inputs to Query -

01) Restrict rows of table TEST_TABLE1
      using index 'Pri-Key'
      for expression "USER_NAME='User1'"

出力例2(rushmoreの場合)

- Inputs to Query -
Table 'TEST_TABLE1'
- End inputs to Query -

01) Restrict rows of table TEST_TABLE1
      using rushmore
      for expression "USER_NAME='User1'"
02) Group result of '01)'

ただし SHOWPLAN の出力は恐ろしく使えない。例えば、
  • 複数のSQLを実行したら、どのSQLの実行計画か全く分からない
    複数のテーブルを結合すると、Temp02 とか内部の名称で出力されるので、アプリケーションのボトルネックとなる SQL をコストの重い順に探すような使い方はできない
  • SHOWPLAN についてのリファレンスが MSDN に無い!
  • 出力内容が恐ろしく薄い
    SQLの区別や処理時間やコストなど、チューニングに必要な情報が出力されない
これでは、検索の実行計画に Rushmore を使ったかどうかのチェックを、SQL の1つ毎に確認する程度の使い方しかできない。


Rushmore や、これ以外のパフォーマンスチューニングについての資料など。

Access データベースのパフォーマンスを向上させる
http://office.microsoft.com/ja-jp/access-help/HP005187453.aspx

Access のパフォーマンスを向上させる
http://office.microsoft.com/ja-jp/access-help/HA010235589.aspx

インデックスの作成と使用によりパフォーマンスを向上させる
http://office.microsoft.com/ja-jp/access-help/HA010210347.aspx

ACC: Access 2.0、Access 95 および Microsoft Access 97 でクエリを最適化する方法
http://support.microsoft.com/kb/112112

Visual Basic でクエリーを最適化する方法
http://support.microsoft.com/kb/172199/ja

Using Rushmore Query Optimization to Speed Data Access
http://msdn.microsoft.com/en-us/library/aa975907.aspx