アプリ版:「スタンプのみでお礼する」機能のリリースについて

Access 2000で作成したmdbファイルを
Access 2013環境で使用しています。

・テーブルのみのmdbファイル(1)があります。
 mdbファイル(1)の中には、テーブルオブジェクトが1つあり、フィールドが1つ、
 フィールドサイズは255です。レコード件数は、36万5000件程度あります。

・フォームやクエリ、マクロ、mdbファイル(1)と
 リンクテーブルでつないでいるmdbファイル(2)があります。

mdbファイル(1)のファイルサイズが、90MBに達しており
mdbファイル(2)を開いたり、何か処理させるのを遅くしているのではないか
と思っています。

他の方の質問をチェックしましたが、結果は

最適化について
 オプション→現在のデータベース→閉じるときに最適化する→チェックON済み
 手動で最適化する→変化なし。

MDBをMDEに変換する
 Access 2013では、バージョンが違うので変換できないようです。
 accdb形式に変換→accde形式に変換しましたが、変化なし
 (そもそも、ファイル(1)はテーブルのみで、マクロやプロシージャは無いので、
 意味が無かったかも)

となっており、対処法が見つからなくて困っています。
何か良い案はないでしょうか。

A 回答 (2件)

255〔B〕×37万=94〔MB〕


なので、実際に使っているデータ量が94MBありますので、圧縮はできません。
ここから、データの削除、挿入を繰り返すと、ブランクデータが増えて、
ファイルサイズはさらに増加します。ブランクデータは最適化によってなくす
ことはできますが、それでも94MBに戻るだけです。

工夫としては、リンクデータのキーの見直し、(1)のMDBにはキーだけを持ち、
データは(2)のMDBに移行するなどの方法があります。
根本的な解決としては、Oracle、SQLServerなどのデータベース
ソフトを使うことです。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
255〔B〕×37万=94〔MB〕
確かにそうですよね。

お礼日時:2015/01/11 07:18

フィールドのインデックスの設定でも結構変わってきます。


ファイル名、idx.accdb
テーブル名、T1
フィールド名、F1、テキスト型でフィールドサイズ255
(インデックスに、はい(重複あり)を設定
フィールド名、F2、長整数型。
標準モジュールにて
Sub b()
Dim db As Database
Dim rs As DAO.Recordset
Dim i As Long
Set db = CurrentDb
db.Execute ("delete * from T1")
Set rs = db.OpenRecordset("T1", dbOpenDynaset)
For i = 1 To 370000
rs.AddNew
rs!f2 = i
If i Mod 1000 = 0 Then
rs!f1 = "abc"
Else
rs!f1 = rndStr
End If
rs.Update
Next
End Sub

Private Function rndStr() As String
Dim i As Integer
For i = 1 To 255
rndStr = rndStr & Chr(Int(Rnd * 26) + 65)
Next
End Function
で、b を実行しダミーデータを入れときます。(最適化も実行しといてね)
このファイルを別名保存して、NOidx.accdb
フィールド名、F1、テキスト型でフィールドサイズ255
(インデックスに、なし)に設定を変更します。
(テーブル名は、NoT1 とか適当に)。(最適化も実行)

二つのファイルをファイルサーバーに移動します。

もう一個検証用のファイルを作成し上記ファイルから
上記テーブルのリンクテーブルを二個作成します。
クエリを上記テーブルから二個作成
抽出条件に、Like "abc*"
としてみます。
クエリの左下にあるレコード数が表示されるまで
インデックス有りの場合は1~2秒
無しの場合は8秒弱でした。
(当方のはしょぼいファイルサーバーなので時間が掛かります。。。)
※初回のクエリに限ります。
一旦ファイルを閉じないとキャッシュから読みだされるようなので
連続して行う場合は時間は同じになります。

以上、
リンクテーブルでもインデックスは有効かのテストでした。
#1さんの回答の通りファイルサイズはどうしようもないと思います。
インデックスを作成していたなら、お邪魔虫回答ですね。(^_^;)
ご参考まで。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!