データベースを最適化する方法
◆概要
この資料は、Microsoft Access でデータベースを最適化する方法を記載しています。
◆詳細
Accessでは、データベースの性能を維持するため、データベースが閉じられ、破棄されたページが最適化されるまで、破棄されたページは削除されません。そのため、最適化されるまで余計なディスク容量が必要となります。
データベースを最適化するときは、次のような処理が行われます。
- テーブルの各ページが連続したデータエース ページになるように再調整されます。この操作を行うと、データベース テーブルの断片化が解消され、パフォーマンスが向上します。テーブル上に主キーが設定されている場合は、主キーの順にレコードがコピーされるので、先読みが効率的になります。これには、Microsoft SQL Serverのクラスタ化インデックスと同様の効果があります。ただしクラスタ化インデックスとは異なり、Accessでは、データベースの最適化後にユーザーがレコードの追加、削除または修正を行う場合には、主キーの順番は保たれません。テーブルに主キーが設定されていない場合は、レコードはファイルに格納されている順序でコピーされます。
- オブジェクトやレコードを削除した結果生じた未使用領域を再利用します。オブジェクトやレコードがデータベースから削除されると、それらが占有していた領域は使用可能になりますが、データベースのサイズは小さくなりません。データベースを最適化すると、サイズが小さくなります。
- オートナンバー型のフィールド(Access Version 1.1 および2.0以前ではカウンタ型のフィールド)のインクリメント値をリセットし、次に割り当てられる値が、最後のレコードの番号の次の番号になるようにします。
- クエリーの最適化処理で使われたテーブルの統計情報を再作成します。この統計情報は、トランザクションのロール バックやデータベースが正しく閉じられなかったことなどにより、時間が経つにつれて古いものになります。
- すべてのクエリーにフラグを立てて、次回実行されるときに再コンパイルされるようにします。データベースの統計情報は変化し、前にコンパイルされたクエリーに不正確な最適化情報が含まれる可能性があるので、このことは重要です。
データベースを最適化するには、データベースを閉じ、[ツール]メニューの[データベースユーティリティ]をポイントし、[最適化]をクリックします。最適化するデータベースが開いている場合は、一度閉じられ、一時ファイル上で最適化され、再び開かれます。最適化するデータベースが閉じている場合は、最適化元のデータベース名と最適化後のデータベース名を指定する必要があります。両方の名前が同じ場合は、一時ファイル上で最適化されます。最適化が完了すると、一時ファイルは元のファイル名に変更されます。
DBEngineオブジェクトのCompactDatabaseメソッドでデータベースを最適化することもできます。CompactDatabaseメソッドを使う場合、最適化先のデータベースには、別のファイル名を指定する必要があります。次のコード例では、CompactDatabaseメソッドを使い、データベースが一時ファイル上で最適化され、最適化の完了後、その一時ファイル名が元のファイル名に変更されます。
◆リスト1 データベースを最適化する
Sub CompactDB() ' データベースを最適化する On Error GoTo CompactDB_Err Const ConfilePath = "C:\RiceVisor\" ' 一時ファイル上でデータベースを最適化する DBEngine.CompactDatabase ConfilePath & "rvdata.mdb", _ ConfilePath & "rvdataTemp.mdb" ' 以前のバックアップ ファイルが残っている場合は、削除します。 If Dir(ConfilePath & "rvdata.bak") <> "" Then Kill ConfilePath & "rvdata.bak" End If ' カレント データベースにバックアップとして別の名前を付け、一時ファイルに ' 元のファイルの名前を付けます。 Name ConfilePath & "rvdata.mdb" As ConfilePath & "rvdata.bak" Name ConfilePath & "rvdataTemp.mdb" As ConfilePath & "rvdata.mdb" MsgBox "最適化が完了しました。" Exit_CompactDB: Exit Sub CompactDB_Err: MsgBox Err.Number & Err.Description Resume Exit_CompactDB End Sub
▼ページトップに戻る