- ベストアンサー
Accessのファイルサイズ縮小について
- Access 2000で作成したmdbファイルをAccess 2013環境で使用しています。mdbファイル(1)のファイルサイズが、90MBに達しておりmdbファイル(2)を開いたり、何か処理させるのを遅くしているのではないかと思っています。他の最適化や変換手法を試しましたが、効果はありませんでした。
- 現在、mdbファイル(1)はテーブルのみでマクロやプロシージャはありません。最適化の設定も行いましたが、ファイルサイズの縮小には効果がありませんでした。ファイルサイズの縮小方法についてアドバイスをいただきたいです。
- mdbファイル(1)のファイルサイズが90MBに達しており、mdbファイル(2)との連携による処理の遅さが気になっています。他の最適化方法やファイル形式の変換を試しましたが、効果はありませんでした。どのようにすればファイルサイズを縮小することができるでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
255〔B〕×37万=94〔MB〕 なので、実際に使っているデータ量が94MBありますので、圧縮はできません。 ここから、データの削除、挿入を繰り返すと、ブランクデータが増えて、 ファイルサイズはさらに増加します。ブランクデータは最適化によってなくす ことはできますが、それでも94MBに戻るだけです。 工夫としては、リンクデータのキーの見直し、(1)のMDBにはキーだけを持ち、 データは(2)のMDBに移行するなどの方法があります。 根本的な解決としては、Oracle、SQLServerなどのデータベース ソフトを使うことです。
その他の回答 (1)
- NotFound404
- ベストアンサー率70% (288/408)
フィールドのインデックスの設定でも結構変わってきます。 ファイル名、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さんの回答の通りファイルサイズはどうしようもないと思います。 インデックスを作成していたなら、お邪魔虫回答ですね。(^_^;) ご参考まで。
お礼
回答ありがとうございます。 255〔B〕×37万=94〔MB〕 確かにそうですよね。