AccessVBA:【DAO】テーブルのインデックス作成・削除(CREATE INDEX・UNIQUE INDEX・DROP INDEX)
Accessでの処理を高速化させるために必須のインデックスについて、ここではDAOを使ったインデックスの作成と削除について説明していきます。
◆インデックスの作成「CREATE INDEX」
「CREATE INDEX」を使ったインデックスの作成方法についてです。
1 |
構文: CREATE INDEX インデックス名 ON テーブル名 (カラム名 , カラム名....) |
構文だけを見ていても分からないので、以下サンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Private Sub インデックス作成_Click() Dim CDB As DAO.Database 'DAOデータベース用のオブジェクトを宣言' Dim xSQL As String Set CDB = CurrentDb '現在のデータベースに接続' 'Set CDB = "C:\Users\VBA\Newファイル.accdb"' '他のAccessに接続' '//CREATE INDEX' xSQL = "CREATE INDEX " '「INDEX」を「UNIQUE INDEX」にするとユニークなキー(「はい (重複なし)」)となります' xSQL = xSQL & "ix_test" xSQL = xSQL & " ON" xSQL = xSQL & " [T_サンプル](" xSQL = xSQL & " [番号]" 'xSQL = xSQL & " ,[名前]"' '複数指定するとテーブルのフィールドプロパティ部分には表示されません。たぶん複合キーだから。' '「デザイン」タブの「インデックス」からは確認できます。' xSQL = xSQL & " )" CDB.Execute xSQL 'SQLを実行' CDB.Close 'DBを閉じる' Set CDB = Nothing '接続解除' MsgBox "完了" End Sub |
「CREATE INDEX」の結果。フィールド名が1つの場合
実行すると以下のように「インデックス」が「はい (重複あり)」となります。
「CREATE INDEX」の結果。フィールド名が複数の場合
「フィールドのプロパティ」の「インデックス」は「いいえ」のままですが、テーブルの「デザイン」タブの「インデックス」を開くと、インデックスが作成されていることが分かります。
「UNIQUE INDEX」の結果
実行すると以下のように「インデックス」が「はい (重複なし)」となります。
◆インデックスの削除「DROP INDEX」
「DROP INDEX」を使ったインデックスの削除方法についてです。
1 |
構文: DROP INDEX インデックス名 ON テーブル名 |
構文だけを見ていても分からないので、以下サンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Private Sub インデックス削除_Click() Dim CDB As DAO.Database 'DAOデータベース用のオブジェクトを宣言' Dim xSQL As String Set CDB = CurrentDb '現在のデータベースに接続' '//Drop Index' xSQL = "Drop Index ix_test" xSQL = xSQL & " ON" xSQL = xSQL & " [T_サンプル]" CDB.Execute xSQL 'SQLを実行' CDB.Close 'DBを閉じる' Set CDB = Nothing '接続解除' MsgBox "完了" End Sub |