
Access2003を使用しています。
メンテナンス後保存をしたり、検索をかけたときとても時間がかかるので、データベースからテーブルだけを切り離す方法を試みてみようかと考えています。
テーブルとそれ以外のデータベースオブジェクトを分割する方法です。
試しにコピーをとったファイルで行ってみましたがあまり速度が速まったように感じません。
参考書を読むと、「大量のデータを蓄積するデータベースに威力を発揮する」と書いてあり、見本は300Mバイトになっています。
私がメンテナンスをかけているファイルは65MB程度です。
これぐらいの大きさだと分割する効力は低いのでしょうか?
他の方法を試みたほうがいいのでしょうか?
ちなみにCPUはあまり高くありません。
どなたかこの方面にお詳しい方がいらっしゃいましたらご教示ください。
よろしくお願いいたします。

No.8ベストアンサー
- 回答日時:
>MDBファイルを全部上書きすることになっているために時間がかかっているのかもしれません。
「なっているため」という言葉遣いは正しくなかったかもしれません。
「なるのかもしれないので」位の意味でした。 申し訳ありません。
No6の回答は憶測で書いています。(何の根拠もありません。)
コンピュータやプログラミングの専門家でもありませんし、
私のアクセスの経験もかわいいものですので、(97から)
「こう考える素人がいる」というくらいにとってください。
ちょっと考えてみましたが、mdbのデータファイルの構造は以下のようになっているそうで、
http://www.mrdb.ne.jp/technic/se_guide/d_fkouzo. …
最適化を行うと
・データ部分のブロックが減る
・インデックスによる順番付けがなされる
ので検索に対するパフォーマンスがあがるということには異論はないと思います。
問題はフォームやレポートをいかに保存しているかですが、
やはり決まった単位のブロックを用意して、オブジェクトを書き連ねているのかなと思います。
(前言を撤回することになりますが)そうだとすると、データ部分を切り離すことと
フォームのサイズを小さくすることは関連性がないということになり、
フォームをセーブするときの時間も、データを切り離したところでフォームを最適化しないと、
あまり変わらないということにもなりそうです。
データ部分のみが最適化されたmdbと、すべてのオブジェクトが
最適化されたものの保存時間を比べてみればヒントはつかめそうですが、、、
そのような実験にあまり意義を感じません。(そこまでアクセスを愛していません。)
いろんなDBがありますが利用する際は定期的に最適化を行わないといけないのではないかと思います。
アクセスも例外ではないということです。
>テーブルは必ず別mdbにして、「閉じるときに最適化」していますので
これを行っていれば、保存に関してこれ以上の効率化は難しいと思います。(コーディングを変えない限り)
逆にこの状況で何らかの問題があるなら、
・データ構造は適正か?
・データにどうアクセスするか?
・コードをどう記述するか?
・ハードウエア(通信環境含む)は適正か?
これと共に、
・DBは適正か?
を診断しなくてはいけないと思います。
質問者さんに対してのアドバイスは、
・実運用中のものを開発する際は、別ファイル(コピー)を作りそちらに手を加える。(実データで開発を行うことは望ましくないと思う。)
・手を加えたものをリリースする前に最適化をする。
・実運用中のものには定期的(期間はdbの更新頻度やつくりにもよる)に最適化を行う。
・データに関しては、何らかの形で定期的にバックアップをとる。
以上のような行為が必要で、
それを怠ると、いつかきっと痛い目にあう(かもしれません。)
データとその他の部分を切り離すと、
・データファイルが破損する可能性が低くなる。
・上記のようなメンテナンスが行いやすくなる。
・他のdbへの移行がやりやすくなる。
というメリットがあります。
No.7
- 回答日時:
No.5です。
この場をお借りして、No.6さんにお尋ねします。
----------
>>フォームのデザインを変えた時に保存をかけると30秒....
>MDBファイルを全部上書きすることになっているために時間がかかっているのかもしれません。
----------
とすれば、データが増えると、チョッとした修正であれば、保存の方が時間が掛かることになりますねェ‥‥
私は、テーブルは必ず別mdbにして、「閉じるときに最適化」していますので、そういう経験はない‥‥と言うことになりますかぁ~

No.6
- 回答日時:
No1です。
データを分割させることについての必要性については、皆様がおっしゃっておられるとおりです。(必須です)
>フォームのデザインを変えた時に保存をかけると30秒....
(実験していないので、ただの憶測ですが)MDBファイル自体が小さくなるので、データを分割すると早くなる可能性はあります。
MDBファイルを全部上書きすることになっているために時間がかかっているのかもしれません。
>新規レコードを追加したときはそれほどでもありません。
これまた憶測ですが、追加の際にはファイルの末尾にデータを加えている(appendしている)だけなので速いのかもしれません。
No.5
- 回答日時:
No.2のogohnohitoです。
No.4さんはAccess1.aから使っていたのですね。私はその頃「桐」を使っていたはずです。桐の「大遅刻」でAccess2.0に移行しましたぁ~
質問者さんは、
> 分割させる方法は意味がないようなのでやめることにしました
と言っておられますが、決してそんなことはありません。むしろ「分割すべき」です。
私は「中間テーブル」を使う方(たぶん)なので、データテーブルと中間テーブルは必ずmdbを分けています。結果として3っのmdbで一つのシステムになります。その目的は、No.4さんの云う「保守性、拡張性」です。
息の長いシステムにするには「分割すべき」です。
No.4
- 回答日時:
Accessで、アプリケーション・システムを構築する場合は分割するのが当然と考えます。
Access1.a~Access2000頃まで10年近く、Accessでシステムを構築してきましたが、
分割してある方が、保守性、拡張性が高いと言えます。非分割型に比べると、
最初にテーブルを開く時に遅いことが欠点ですが、2回目以降はファイルが
開いているので、処理速度の劣化はありません。但し、非分割型より速いかと言うと、
目覚しい向上は期待できません。
尚、DBを最適化すると、処理速度が向上しますが、分割している場合はVBAで処理可能です。
http://www.geocities.jp/cbc_vbnet/kisuhen/mesodo …
No.3
- 回答日時:
その本で書かれているのが、「速度が速くなる」目的なのか判断しかねますが、単純に分けたからといって早くなることは無いと思います。
が、ネットワーク環境でファイル共有にしている場合は、分けることによってネットワーク トラフィックを少なくできるので その意味では早くなります。
複数ユーザーで利用する場合には、データのMDBだけを共有するのが(リンクテーブル)いいですね。
あとは、1ファイルで処理しているより ファイルが壊れた時のトラブルを回避できる点や、開発中でも完全に分離していると テンスと環境等も作成しやすい面があります。
No.2
- 回答日時:
No.1さんの言うとおりで、「テーブルの最適化」と「適正なインデックス」に懸かっていると思います。
更に、テーブル以外のmdbを(閉じる時に)最適化したりmde化すると、体感はありませんが速くなる方向にあります。

No.1
- 回答日時:
専門家ではないので、はずしているかもしれませんが、
>テーブルとそれ以外のデータベースオブジェクトを分割する方法
これによって、パフォーマンスが大きく変わるとは思えません。
(大きなアクセスファイルを使う上では必須の行為だと思いますが)
検索の速度はどのようなテーブル(フィールド数、レコード数)から、
どういう形で(どのフィールドに対して、どういう形の)検索を行っているのかによります。
抽出の速度を上げるためには(1)テーブルの最適化と(2)適正なインデックスの作成がメインだと思います。
それを行ったうえでのパフォーマンスに不満があるなら、
検索方法の見直し、テーブル構造の見直しやDBMSの変更を視野に入れるべきだと思います。
保存に時間がかかるというのは、意味がはっきりとわからないのですが、
何らかの形でバックアップなどを取るときに遅いということでしょうか?
それとも、レコードを挿入するのに時間がかかるということでしょうか?
レコード挿入についてでしたら、これまたどのような形でレコードを挿入されているかにかかってきます。
この回答への補足
補足ですが、保存に時間がかかるというのは、フォームのデザインを変えた時に保存をかけると30秒ほどかかります。
新規レコードを追加したときはそれほどでもありません。意外と早いです。
これはどうしてなのでしょうか?
よろしかったら教えていただけないでしょうか。
なお、分割させる方法は意味がないようなのでやめることにしました。
教えていただいたテーブルの最適化と適正なインデックスの作成を見直してみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
先着1,000名様に1,000円分もらえる!
教えて!gooから感謝をこめて電子書籍1,000円分プレゼント
-
accessの処理が遅い
その他(データベース)
-
Accessリンクの仕方によるフロント速度違い
その他(データベース)
-
AccessのRefresh・Requery・Repaintの違い
Access(アクセス)
-
4
「RunSQL」と「Execute」の違い
Access(アクセス)
-
5
アクセスをネットワークでリンクさせると非常に遅い!?
その他(データベース)
-
6
アクセスVBAのMe!と[ ]
Access(アクセス)
-
7
Accessのテーブルデータを一気にVBAで追加したい・・
その他(データベース)
-
8
ACCESSでExcelにデータ出力、高速化
その他(プログラミング・Web制作)
-
9
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
10
Access サブフォームでの選択行の取得
その他(データベース)
-
11
抽出条件でデータ型が一致しません。のエラーメッセージが出る
Microsoft ASP
-
12
Accessでテーブルからテーブルにデータをコピーしたい
その他(データベース)
-
13
アクセスでフォームビューがみれません?
Access(アクセス)
-
14
ACCESS のクエリー実行に異常に時間がかかる
その他(データベース)
-
15
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
16
Accessで検索を高速化
Access(アクセス)
-
17
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
18
ACCESSのODBCリンクテーブルに接続できなくなる
その他(データベース)
-
19
Access終了時の最適化が失敗?
その他(データベース)
-
20
Access 同じデータをたくさんのレコード(同一列)に一度に入力するには
Access(アクセス)
関連するQ&A
- 1 ACCESS ACCESS VBA テーブル テーブル変換 番号 個数 変換
- 2 access2007のテーブル分割について質問させていただきます。
- 3 Accessで自前の自動採番処理で採番テーブルを
- 4 アクセスのフォームで連動したコンボボックスの絞りこみ速度を速める方法はないでしょうか?
- 5 Accessでテーブルからテーブルにデータをコピーしたい
- 6 Ms Access テーブルBにテーブルAのCDを充てたい。(クエリ?紐づけ?リレーションシップ?)
- 7 Access2000でAccess97のテーブルを利用する方法
- 8 access2007のビッボトテーブルをaccess2013で使用する方法
- 9 AccessでOracleのテーブルをリンクし、Access側では読み取り専用にしたい
- 10 AccessからOrcleのODBCリンクテーブルにて
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
同一テーブルのデータを参照し...
-
5
Accessのテーブルデータを一気...
-
6
住所のDBテーブル、マスターの...
-
7
IF NOT EXISTを使用するINSERT文
-
8
ERROR1062:Duplicate entry.......
-
9
同テーブルの差分レコードの抽出
-
10
Oracleで上書きImportはできま...
-
11
処理の途中で停止させ、再開さ...
-
12
テーブルで一番古いレコードだ...
-
13
access 特定のレコード数までエ...
-
14
VBAでSQLServerへのODBC接続
-
15
ACCESS2010の最適化が中断される
-
16
Accessの処理速度を速めるため...
-
17
クエリとパススルークエリを作...
-
18
ACCESSのクエリで、ランクテー...
-
19
テーブル作成について
-
20
Access(MDB)の複製(レプリケー...
おすすめ情報