ちょっとMicrosoft Accessについて相談を受けまして、チューニングにより性能向上ができないか調べてみました。
方々の英文サイトを調べて回って、検証レポートとしてまとめました。目次だけですが、その内容を掲載します。
……………………………………………………………………
目次
1. 出典元 7
2. 背景 7
3. 目的 7
4. 概要 7
5. TIPS 7
5.1 テーブルパフォーマンスのヒント 7
[1] テーブルを正規化すること 7
[2] すべてのテーブルに主キーを設定すること 7
[3] 主キーは1つのフィールドで、数値型とすること 8
[4] テーブル結合は、リレーションシップで行うこと 8
[5] 不要なサブデータシートを削除すること 8
[6] 最適なデータ型を選択すること 8
[7] 必要に応じてセカンダリインデックスを追加すること 8
[8] 過剰なインデックスを作らないこと 8
[9] 同じデータがたくさんあるフィールドのインデックスを作らないこと 8
[10] インデックスをできるだけ小さくすること 9
5.2 リンクされたデータベースとリンクされたテーブル 9
[1] 全てのリンクされたデータベースへのオープンハンドルを維持する 9
[2] レコードナビゲーションを最小化する 9
[3] データエントリーモードを使用する 9
[4] データ入力フォームを作成する 9
[5] クエリから返されるデータを制限する ★ 9
[6] ドメインの集計関数を使用しない 9
[7] ロックの即時解除 10
5.3 SQL ServerとODBCのパフォーマンスに関するヒント 10
[1] ODBCテーブルのリンク 10
[2] サーバーのトラフィックを最小化する ★ 10
[3] 適切な場合はスナップショットを使用 10
[4] 大規模なレコードセットにはDynasetを使用する 10
[5] キャッシュを活用する 10
[6] ローカルでのクエリ処理を強制しない 10
[7] 一括更新にFailOnErrorを使用する 11
[8] ODBCDirectの使用 11
5.4 データベース・パフォーマンスのヒント 11
[1] データベースを2つに分割する 11
[2] 現在のワークグループ情報ファイルを使用する 11
[3] Accessパフォーマンスアナライザーを使用する 11
[4] Microsoft Access テーブルアナライザーを実行する 11
[5] 2007以降のデータベースでグラフィックのサイズを小さくする 11
[6] データベースの圧縮を頻繁に行い、スペースを確保する 12
[7] 高速に見えるようにする 12
5.5 クエリパフォーマンスのヒント 12
[1] 統計情報を更新するために頻繁にコンパクトにする 12
[2] クエリ条件フィールドとジョインフィールドのインデックス化 ★ 12
[3] 結合フィールドで同一または互換性のあるデータ型を使用する 12
[4] クエリから返されるフィールドの制限 ★ 13
[5] 計算フィールドとIIF関数を避ける 13
[6] 非インデックスフィールドで条件指定をしない ★ 13
[7] ソートフィールドのインデックス化 13
[8] 同じクエリを何度も実行しないためにテンポラリテーブルを使用する 13
[9] 外部テーブルでのドメイン集計関数を避ける 13
[10] クロスタブのクエリで固定カラムの見出しを使用する 13
[11] >=と<=の代わりにBETWEENを使用する 13
[12] レコード数を数えるにはCOUNT(*)を使う 13
[13] アプリケーションを配信する前に、各クエリをコンパイルする 13
[14] Rushmore クエリ最適化の利用 14
[15] 可能な限りプライマリーキーインデックスにリンクする 14
[16] 一対多の制限を実験する 14
[17] 必要であれば正規化しない 14
[18] Joinの代わりにSub Queryを使用した実験 14
[19] 各クエリで返されるフィールドの数を制限する 14
5.6 フォームのパフォーマンスのヒント 15
[1] フォームのRecordSourceのSQLをクエリとして保存する 15
[2] 未使用のフォームを閉じる 15
[3] フォームを非表示にして開く 15
[4] フォームのDataEntryプロパティを使用する 15
[5] フォームのレコードセットをソートしない 15
[6] クエリに基づくフォームを作成/返されるフィールドを最小限にする 15
[7] 軽量フォームを使用する 15
[8] フォームにリンクさせるためのフィールドをインデックス化する 15
[9] サブフォームに編集プロパティを設定する 15
[10] リストボックス/コンボボックスに含まれるフィールドの数を減らす 15
[11] コンボボックスの自動拡張を無効に設定する 15
[12] 自動展開されるコンボボックスの先頭フィールドをテキストへ 15
[13] バインドされたコンボボックスの最適化 15
[14] コンボ/リストボックスのリンクデータをローカルに移動する 15
[15] 複数ページでのコントロールのグループ化 15
[16] タブページでページが選択されたときだけサブフォームを読み込む 15
[17] 結合されていないOLEオブジェクトが含まれるフォームを閉じる 15
[18] サブフォームをリスト/コンボボックスコントロールに変換する 15
[19] フォームモジュールのコードを標準モジュールに移動する 15
[20] 不要なプロパティの割り当てを避ける 15
[21] Requeryアクションの代わりにRequeryメソッドを使用する 16
[22] ビジュアルフィードバックを行う 16
[23] ハイパーリンクを使用してフォームを軽量化する 16
[24] フォームを複数のページに分割する 16
[25] コントロールの数を最小限に抑える 16
[26] コントロールの重なりを避ける 16
[27] グラフィックの使用は控えめに 16
[28] イメージコントロールの使用 16
5.7 レポートパフォーマンスのヒント 17
[1] レポートRecordSourceのSQLをクエリとして保存する 17
[2] レポートクエリをソートしない 17
[3] ソートとグループ化における式と関数の使用を避ける 17
[4] ソートとグループ化で使用するフィールドのインデックス化 17
[5] クエリに基づくレポート-返されるフィールドの最小化 17
[6] サブレポートのリンクに使用されるインデックスフィールド 17
[7] 基準に使用されるインデックスサブレポートフィールド 17
[8] レポートのレコードソースでドメイン集計関数を避ける 17
[9] NoDataイベントの使用 17
[10] 不必要なプロパティ割り当てを避ける 17
[11] 不要なレポートの削除 17
[12] レポート上のコントロールの数を制限する 17
[13] コントロールの重なりを避ける 17
[14] ビットマップの使用を最小限に抑える 17
[15] イメージコントロールの使用 17
5.8 マクロのヒント 17
[1] マクロをVisual Basicのコードに変換する 17
5.9 モジュール/VBAのパフォーマンスに関するヒント 18
[1] MDEファイルの作成 18
[2] コンパイルされた状態を実現する 18
[3] デコンパイルを回避する方法 18
[4] デコンパイルで古いVBAのコンパイル状態をなくす 18
[5] ActiveXコントロールは参照を持つべき 18
[6] 明示的なオプションの使用 18
[7] 最も効率的な変数型を選択する 18
[8] 早期バインディングの使用 18
[9] オブジェクト変数に何かを割り当てる 18
[10] Meキーワードの使用 18
[11] 部品が他のコードを実行する場合、即時If関数を避ける 18
[12] 動的な配列を使用する 18
[13] デマンドローディングを利用する 18
[14] デッドコードをなくす 18
[15] 変数の代わりに定数を使う 18
[16] 無限の再帰を避ける 18
[17] 文字列データをスマートに宣言する 18
[18] OLEリファレンスを最小化する 18
[19] 画面描画をオフにする 18
[20] クエリの方が良い場合はコードを書かない 18
[21] データベースは1日に2回以上閉じよう 19
[22] ActiveXコントロールは参照を持つべき 19
[23] ループの境界を決定するために式を使用しない 19
5.10 データアクセスオブジェクト(DAO)プログラミングのヒント 20
[1] 「Find」ではなく「Seek」を使う 20
[2] レコードのナビゲーションにブックマークを使う 20
[3] FindRecordとFindNextにインデックス付きフィールドを使用する 20
[4] 必要なとき以外はトランザクションを使用しない 20
5.11 ジェットエンジンチューニングのヒント 21
[1] SHOWPLANを使用してクエリの実行計画を確認する 21
[2] Jetレジストリ設定によるデータベース性能の調整 21
[3] スレッド 21
[4] MaxBufferSize 21
[5] ユーザコミットシンク 21
[6] 暗黙のコミット同期(ImplicitCommitSync 21
[7] フラッシュトランザクションタイムアウト 21
[8] ExclusiveAsyncDelay(排他的非同期遅延 21
[9] 共有非同期遅延(SharedAsyncDelay 21
[10] ページタイムアウト 21
[11] ロックディレイ 21
[12] MaxLocksPerFile 21
[13] RecycleLVs 21
[14] ISAMStats を使用してエンジンの詳細を確認する 21
5.12 スタートアップのヒント 22
[1] スタートアップフォームのコードを削除する 22
[2] 起動フォームのコードを最小化する 22
[3] 起動フォームでActiveXコントロールを使用しない 22
[4] データベースの最新版を自動で導入する 22
5.13 マルチユーザーパフォーマンスのヒント 22
[1] データベースを分割する 22
[2] 静的データをローカルに保持する 22
[3] ロック競合を回避するためのオプション設定 22
[4] レジストリでJetをチューニングする 22
5.14 コンピュータのパフォーマンスに関するヒント 22
[1] RAMの増加 22
[2] NTFSの圧縮を避ける 22
[3] ネットワーク速度を最大にする 22
[4] ローカルディスクに十分な空き容量を確保する 22
5.15 Windowsのパフォーマンスに関するヒント 23
[1] データベースのローカル化 23
[2] ローカルにアクセスをインストールする 23
[3] データベースを排他的に開く 23
[4] 不要なアプリケーションを閉じる 23
[5] ディスクを最適化する 23
[6] 時々アクセスを閉じて、漏れたメモリを回収する 23
[7] Windowsをローカルにインストールする 23