• ベストアンサー

追加クエリの遅さを解消したいです。

外部データベースのデータをAccessのテーブルとして取り込んでから、作業するシステムを作成しています。 日々新規のデータが追加されていく外部データベースの、新規データのみを追加していく追加クエリを作成したのですが、とにかく遅いのです! データは6万件ほどあります。けれど、新規に追加したいデータは、日々30件ほどです。 この遅さを解消する方法はありませんか? 良いアドバイスがありましたら教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

つまり、外部DBのテーブルと、AccessDBのテーブルの差分を取って、この差分だけをAccessDBのテーブルに追加してる、ということですか? んと、まず、外部DBのテーブルを全部取り込む。 取り込んだテーブルにインデックスをつける。 その後で、差分を取って、追加するっていうふうにしたらどうでしょ。

maokubo
質問者

お礼

外部データベースとの関係を見直し、複数回に分けて追加するようにしたら、1分まで短縮できました。 ありがとうございました。

その他の回答 (3)

  • majionea
  • ベストアンサー率30% (3/10)
回答No.4

NO1に回答したものです。 250MB以上あって、追加クエリの起動に時間がかかるんですね。考えられることは、(1)ユニオンクエリを使用していないか、(2)クロス集計クエリを使用していないか、(3)ハードディスクの容量の空きがない、この3つが考えられますね。 (1)と(2)のクエリを使用すると、メモリー次第では実行するのにかなりの時間がかかります。また、ハードディスクの空きは十分に作ってください。 そもそもmaokuboさんが作られたDB(データベース)の容量はいくらですか?10000MB以上ですか? こうなったら、「最適化」を実行してみてください。やりかたは、「ツール」-「データベースユーティリティ」-「最適化」です。

maokubo
質問者

お礼

追加クエリを複数に分けて実行するようにしたら、1分まで短縮できました。 クロス集計などは使用していないです。 回答ありがとうございました。

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.3

6万件もレコードがあるのであれば別のちゃんとしたデータベースを利用した方が良いと思いますが・・・ 速度的な問題もある程度は緩和されると思いますよ

  • majionea
  • ベストアンサー率30% (3/10)
回答No.1

メモリーは幾つのをお使いですか? 以前、3000件のデータを32MBで管理していましたが、その時も遅かったです。 6万件ならば、256MB以上は必要じゃないですか?

maokubo
質問者

補足

早速の回答ありがとうございます。 メモリは254MBあります。 もっと増やさないとだめですか? 追加クエリの終了する時間を計ってみたら、4分でした。

関連するQ&A

  • Accessの追加クエリのエラーについて

    Accessについて教えてください。 データベースを作成しているのですが複数でデータを閲覧したり情報を入れようとするためA(データ保存ファイル)とB(メニューファイル)の2つを作成しました。Aはデータを保存するテーブルのみでBにはAのテーブルをリンクさせているものとデータを一時保存するテーブルがあります。 Bのデータ一時保存テーブルに一旦データを入れ、その後、追加クエリを実行しAのテーブルに反映させ、削除クエリで不要になったBのテーブルデータを削除していますが、追加クエリが上手く動いていないようです。 テキスト型、日付型等のフィールドは追加されるのですがメモ型フィールドに入れていたデータは削除されてAのテーブルに追加される時があります。(削除クエリはきちんと実行されています。) 私が行う限りは上記のような事象はありませんが、すでに何件か発生しているようです。 その時に表示されるメッセージは『???に失敗しました』と出ていたそうです。 何か思い当たる原因をご存知の方がいっらしゃいましたら教えてください。(上手く説明できてなくて申し訳ありません。) ちなみにAはNWサーバー、Bはローカルサーバーに保存しています。

  • アクセスの追加クエリで教えてください。

    非連結のフォームから、追加クエリを使ってテーブルにデータを追加したいのですが、 どうもうまくいきません。 具体的には、 履歴フォーム、というフォームで、 日付 施設名 内容 という項目があります。 追加クエリで、 [Forms]![履歴フォーム]![日付] のようにほかの項目も入力し、 その保存先は、 履歴テーブル、で、 項目は、履歴フォームと同じです。 履歴フォームにデータがまったく入っていない状態ですと、 追加クエリを実行した際、 0件のデータを追加します。となります。 自分でテーブルに直接データを何か入力すると、 次に追加クエリを実行した際、 1件のデータを追加します。となります。 続いて追加クエリ実行の際には2件、 その次は4件追加と、 テーブルに入っているデータの件数だけ、 そのときにフォームに入力されている情報が、追加されてしまいます。 どのような原因が考えられますでしょうか? お知恵を貸していただけたらと思います。 情報が不十分でしたらご指摘願います。 補足いたしますので。 それでは、よろしくお願いいたします。

  • 二つのテーブルを一つのクエリにまとめる方法

     ACCESS2000、ウィンドウズ98です。  二つのデーターベースがあり、まったく同じ名前・すべてのフィールド名も型もプロパティも同一の(COPYなので)テーブルを有しています。  第三のデーターベースを作り、そこに二つのテーブルをまとめたテーブルかクエリーを作る方法(校舎が二つあって、それぞれ違う子供達のデータなのです)がありましたら教えてください。  外部リンクの方法は知っております。

  • MSアクセスのクエリで結果がおかしい

    アクセス2000で追加クエリを作成していますが、 クエリのデータシートビューで確認したレコードと 追加されたテーブルで確認したレコードが異なり、テーブルのデータが少なくなってしまっています。 条件としては、 クエリの参照元 SQLサーバからのリンクテーブル(レコード数で13万件程度) 追加先のテーブルはローカルのmdb内です たまたまかもしれませんが、今テストしているデータは、 クエリ上では、19件あるものの、実行しても9件しか追加されません。 原因としてありそうなものがわかる方がいれば、よろしくお願いします。

  • Access2000の追加クエリについて教えてください

    元Excelのデータをインポートして、Accessのテーブルデータに追加クエリで追加するとき、型変換エラーとなります。 このときテーブルのデザインで一つずつ数値型とテキスト型をあわせています。ただフィールド数が多いとかなり不便です。 何かよい方法はありますか?

  • アクセスの追加クエリについて(1対1リレーションシップの場合)

    お世話になります。 似たような質問はあるのですが、どれもしっくりこないので質問させて下さい。 アクセスで検査結果のデータベースを作ろうと考えています。 アクセスでデータベースを作製するのはこれが初めてです。 1製品毎に製造番号をつけ、各テーブルの主キーにしています。 テーブルは検査のタイミング毎に分け、それぞれの検査項目をフィールドに設定しています。 この方法だと各テーブルのリレーションは1対1になります(よね?) それで、新たに製品の詳細(製造日や数量など)を一括して登録したいと考え、製造番号を含むテーブルを作成しました。 このテーブルで入力した製造番号を他のテーブルにも自動で登録したいので、追加クエリでやろうとするのですが、 「0件のレコードを追加します」と出てしまいます。 データは適当にですが、入力はしています。 どうすれば実現できるのでしょうか? また、テーブルを分割しなければ製造番号を追加する必要もない訳ですが、 1つのテーブルに統合するべきなのでしょうか? その場合はフィールドは50個ぐらいになってしまいます。 大変お手数ですが、ご教示頂けると幸いです。 よろしくお願いします。

  • テーブルへのデータ追加の元となるクエリの探し方

    Accessのあるテーブルがあります。 そのテーブルには、クエリによりレコードが追加されていると思われるのですが、どのクエリを元にレコードが追加されているのか不明です。 どのクエリを元にレコードが追加されているのかを探り当てるには、どのようにしたらよいか、ご教授願います。 ※ Win XP、Access2002で作業しています。

  • Accessクエリについて

    お世話になります。 Access初心者です。 テーブルを3つ使いクエリを作成して見ました。 しかし、データが何故か重複している物があるのですが、 どうしてでしょうか。 解消方法はどうすれば宜しいのでしょうか。 お教え頂きたく宜しくお願い致します。

  • テーブル作成クエリとデータベースの分割

    当方、Accessは全くの素人ですが、急遽Accessにて連絡先台帳を 作ることとなりました。 参考書を片手に、なんとかそれ相応のものになってきましたが、 表題部分にて四苦八苦しております。 どうぞ、ご教授のほどよろしくお願いします。 まず、連絡先テーブルを作成しました。 この中には個人名、会社名、住所などを入力するようにしました。 会社名の中には複数のレコードがあるため、個人向けではなく、会社向けの 送付用のラベルを作成したいと思い、テーブル作成クエリを用いて 会社テーブルを作成しました。 上記テーブルから、ラベル作成までは何とかできるようになりましたが、 複数のユーザーがこのデータベースを使うため、データベースの分割をし 運用したいのです。 また、この会社テーブルを別のデータベースでも使用したいと思っております。 ツールを用いて、データベースの分割はできましたが、新たな連絡先が 追加されたときなど、再度テーブル作成クエリを実行してしまうと、リンクが 外れてしまいます。 外部データからリンクテーブルを作りなおすと、以前のデータのままなので、 分割したデータベースを更新しなければならないことはわかりましたが、 その方法が全くわかりません。 できれば、更新ボタンを押した際に、 テーブル作成クエリを起動して、テーブルを作成し、分割したデータベースを 更新させたいのですが、何か良い方法はございませんでしょうか? 他の方法でも全く問題ありません。 VBAやマクロでも構いません。 ただ、VBAもマクロも殆どわかりませんので、できればコード等を記載して いただけると助かります。 Access2007を用いております。 どうぞよろしくお願いします。

  • アクセスの追加クエリで、

    アクセスの追加クエリで、テーブルにデータを追加したいのですが、追加するデータと追加されるデータを照らし合わせて、完全に一致しない物だけを追加するにはどうしたら良いですか? 6フィールドあり、全てが一致するデータはありませんが、5フィールドだと一致してしまう物があります。 誰か教えて下さい。よろしくお願いします。

専門家に質問してみよう