• ベストアンサー

ACCESSのスピードについて

1.前提 5年間で件 件数:T_売上:65,957  T_売上明細:10,8720    T_受注:61,486 T_受注_金額:66,699 →200日/年×5=1000日で割ると1日あたり 件数:T_売上:66  T_売上明細:11    T_受注:61 T_受注_金額:67 サーバ:CPUがP3&メモリ1GB、Win2000Server(ハードはNECのExpress) *サーバにテーブルだけのACCESSがあり、すべてのクライアントはこのテーブルにリンクしています。 クライアント:Win98 5台、ACCESS2000 これをネットワークの線を変えずにハード&ソフトを入れ替えます。 (10BASEです) サーバ:Xeon3.2GHz,1GBメモリ(NEC Express) クライアント:WinXp Pro(Celeron2.5GHz,256MBメモリ) 11台、ACCESS2003 になります。 データ件数は上記2倍を想定しています。 以前のデータは、そのままACCESS2003に移行して今後のデータは追加する形になります。 2.質問 現在も遅く感じますが、現在以下になるような事があるでしょうか。また、遅くなるとしたら感覚的にどのくらいでしょうか。 なお、ピーク時には平日一日の3,4倍のデータが想定されます。 ご経験がおありになれば何でも結構です。 教えてください。

  • idek
  • お礼率47% (170/361)

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

>現在以下になるような事があるでしょうか 以下になる事はないと思います。 1日あたり売上:66・売上明細:11・受注:61・金額:67の4倍弱で700レコード前後なら問題ないと思いますが。 2003ならクライアント数も大丈夫なはずです。 2GBからシステムオブジェクトに必要な領域のサイズを引いた値が最大のmdbファイルサイズになりますのでその辺を考慮すれば平気かと思います。 メモリの消費も大きいので無駄なフォームのOpen・Closeはしないとか。 ペルプでもパフォーマンスの向上などで探せば出てきます。 パフォーマンスを向上させ安定したフロント/バックエンドとして使用するならサーバーはSQLServerとかにしクライアント/サーバー環境にした方が良いと思います。予算等で一概には言えませんが。 >#1の方がインデックスの作成とあるので 並べ替えや結合を行うフィールドや抽出条件を設定するフィールドにインデックスを作成します。 ただしインデックスの作成が適切でない場合もあります。 インデックスによりmdbファイルのサイズの増加やマルチユーザーアプリケーションにおける同時実行の制限やインデックスが作成されたフィールドのデータを更新する場合やレコードの追加や削除を行う場合のパフォーマンスの低下が発生します。 インデックスを追加することでわずかにクエリが高速化されてもレコードの追加にその倍の時間がかかるようになりロックに関する問題が生じることがあります。 不要なインデックスは付けないで一意の値を持つフィールドのみにインデックスを作成する必要があります。むやみにインデックスを付けると速度低下を招きます。 ご存知とは思いますが・・。

idek
質問者

補足

大変参考になりました。まだ実行するにはビビッていますが、安心度が増えました。ありがとうございました。

その他の回答 (1)

  • PrintScree
  • ベストアンサー率25% (538/2091)
回答No.1

現在の状況が不明なのでなんともいえませんが、スピードアップのためのテクニックならアドバイスできます。 まず、各テーブルの必要な項目にインデックスを作成します。 項目の洗い出し方法は、クエリーで項目同士を線で連結している項目、クエリーの抽出や並び替え条件が設定されている項目。 を洗い出し、テーブル定義で洗い出した項目にインデックスを作成します。 インデックスを作成すると、場合によってはビックリするほど速度向上が期待できます。 ハード的アプローチとしては、ダムHUBを使用しているならスイッチングHUBに交換するとネットワーク上でのコリジョンが減りレスポンスが向上します。

関連するQ&A

  • Oracleのアクセス速度

    クライアント(Windows98)からISDN(64K)回線を使用して、Oracleサーバー(Oracle8.0.3)に接続しDBアクセスした場合の、アクセス速度ってどれぐらいでしょうか。 なお、データ件数は約1000件を想定しています。

  • ACCESS2000 合計の表示がおかしい

    毎日の売上と仕入れの金額をそれぞれ合計して出したいのですが、 サンプル仕入れなどで0円の売上がある日の合計が正しく表示されず、 例えば0円の売上が4つと100円の売上が1つの場合、 400円と表示されます。 仕入れに関しても同様です。 どうすれば正しく表示されるようになるのか教えてください。 以下はソースです。 SELECT T受注伝票.受注日 , Sum(T受注伝票.税込金額計) AS 合計 , T発注伝票.発注日 , Sum(T発注伝票.税込金額計) AS 合計1 FROM T受注伝票 INNER JOIN T発注伝票 ON T受注伝票.受注日 = T発注伝票.発注日 GROUP BY T受注伝票.受注日 , T発注伝票.発注日 HAVING   ((T受注伝票.受注日) Between [FROM] And [TO]) AND   ((T発注伝票.発注日) Between [FROM] And [TO])) ORDER BY    T受注伝票.受注日    , T発注伝票.発注日;

  • MS Accessが時間と共に重くなる

    MS Accessでシステムを構築したのですが、同じ画面を使い続けるとパフォーマンスが悪くなります。 <システムの構成> ファイルサーバにテーブルを持つmdbファイル(サーバmdb)を置き、 各PCに置かれた、フォーム、レポート、クエリ、VBAを持つmdb(クライアントmdb)から接続します。 各PCのクライアントmdbのフォームを何時間か使い続けていると、サーバからデータを取得するのが遅くなります。 (調べてみると並び替え(order by)が主な原因のようです。参考までに遅くなった時のデータ取得件数は2万件程でした。) ただし遅くなっても、1度フォームを閉じて開き直すと、同じデータでも再び速くなります。 どうすれば速くなるかは別途考えなければいけませんが、そもそも何が原因なのでしょうか。 ・朝(使い始め)は速い ・同じフォームをずっと使い続けるとデータ取得が遅くなる ・フォームを閉じて開き直すと再び速くなる メモリが関係してそうな気がしますが、MS Accessではこういうことは起こるもの(仕様)なのでしょうか。原因が知りたいのですが、何か情報はないでしょうか。

  • VBからサーバ上のAccess mdbにアクセスする方式について

    クライアントのVBアプリからサーバ上のAccess mdbにアクセスしたいのですが、 データベースがAccessの場合、データを丸ごとクライアント側に持ってきて、クライアント処理になってしまうと聞きました。 サーバ上でデータセットを作成してクライアントに渡す方法があれば教えてください。 よろしくお願いします。

  • MS-Accessとメモリの関係

    Accessのデータベースを使用しています。 データ本体(1GB程度)はサーバにおいてクライアントは10MB程度の重さで使用しています。PCのメモリは4GBです。 (その他のクライアントでは4GBでさくさく動いてます) で、 その運用時に、同時に開いた大したことのない小さなエクセルをプリントするときに「メモリ不足でプリントできない」というアラートが出てプリントができないときがあります。 Accessからのプリントでもこのアラートが出るときもあります。 ここで疑問なのですが、Accessで多くのページというかレコードにアクセスした場合、キャッシュのようなものがクライアント側に残るものなのでしょうか? そのために長時間Accessを使ってるとキャッシュが蓄積されてしまいメモリ不足、となるのでしょうか? でも、LANを切ればデータは一切表示されないわけで、キャッシュなど無いような気もするのですが。ではなぜメモリ不足になるのでしょう。 また、その解消方法は? ご教授よろしくお願いいたします。

  • MS Accessを共有した際にファイルが壊れるのを回避する方法

    ちょっとしたツールをAccessで開発したいのですが、 Accessファイルを共有するとファイルが頻繁に壊れると伺いました。 そこで以下のような回避策を考えてみたのですが、 効果はありますでしょうか。 これでは、あまり意味がないとか、他に注意したほうが良い点等ありましたら、アドバイスいただければと思います。 なお、ツールは、50名位が使用(同時アクセスは3名~4名程度)予定で、 サーバ上にメインのmdbファイル(以下「サーバmdb」)を、各クライアントにもそれと連携するmdbファイル(以下「クライアントmdb」)を置くことを想定しています。 (1) データは全てサーバmdbで保持する。クライアントmdbには、入力用のフォームと、サーバmdbから取得したデータを一時的に保持するテンポラリのテーブルを持つ。 (2) クライアントmdbからサーバmdbにアクセスし、必要なデータをクライアントmdbにインポートする。 (3) クライアントmdbで、取り込んでデータをもとに、データの追加・修正を行い、当該データをサーバの所定のディレクトリにCSVで出力する (4) サーバmdbは、日次で、所定のディレクトに配置された、クライアントmdbから出力されたファイルを読み込み、データを更新する (5) (4)の読込み・更新作業中は、クライアントmdbからサーバmdbにはアクセスしない(外部ファイルで制御) 以上です。 要は、クライアントmdbが、直接サーバmdbを更新しないようにし、参照のみにするということです。 よろしくお願いします。

  • アクセス2000とアクセス2007の互換性

    当社のシステムは、サーバー(2000サーバー)とクライアント(WIN xp)のシステムです。 今回新しくクライアントにWIN vistaの導入を考えていますが、アクセス2000で作成されたデータ(サーバーにて一元管理)が、WIN vistaで作成された アクセス2007で読み書きが何も意識せずに可能なのでしょうか? 回答の程宜しくお願い致します

  • Accessデータの特殊なエクスポート方法

    いつもお世話になっております。 Accessの特定のデータを、ある特定のExcelの指定したシート及びセルにエクスポートする方法が分かりません。 例として、Accessのテーブル(T_売上)のフィールド(品名)をエクセルファイル(販売.xls)のsheet1のシート名(売上明細)のセル「D6」へ、同じくAccessのテーブル(T_売上)のフィールド(金額)をエクセルファイル(販売.xls)のsheet1のシート名(売上明細)のセル「F12」へエクスポートしたいのです。 これにより、Accessデータを利用して、請求書を作成したいのです。 もちろんAccess上では、請求書発行プログラムは作っていますが、今回、Excelで利用する必要が生じたための質問です。 Access及びExcelは2010(OSはWindows7)です。Access、Excelは2003でも構いません。 また、Access、Excelは共にC:\にあります。 ネットでも色々と調べてみましたが、今一つ要領を得ません。 方法をご存知の方は是非アドバイスをお願い致します。

  • Access:サブフォームのレコードのコピー(複数)

    Accessにて販売管理システムを構築しています。 以下の構成にてテーブルがあります。 ------------------------------ T_見積伝票(メイン)  ・見積ID(主キー)  ・顧客名  ・見積日 ------------------------------ T_見積明細(サブ)  ・明細ID(主キー)  ・見積ID  ・商品名  ・数量  ・単価 ------------------------------ T_受注伝票(メイン)  ・受注ID(主キー)  ・顧客名  ・受注日 ------------------------------ T_受注明細(サブ)  ・明細ID(主キー)  ・受注ID  ・商品名  ・数量  ・単価 ------------------------------ *主キーはすべてオートナンバーにて採番されるようにしています。 T_見積伝票とT_見積明細がリレーション T_受注伝票とT_受注明細がリレーション 実現したいことは、T_見積伝票&T_見積明細に入力された内容が 実際に受注となった場合、「受注に転記」のようなボタンを設置し クリックすることで、T_受注伝票&T_受注明細に複製できればと思っています。 T_見積伝票とT_受注伝票にはいくつか異なるフィールドがあるので、(見積日と受注日) 対応するフィールドの内容のみコピーしたいです。 逆にT_見積明細とT_受注明細は主キーとなってるIDのみ違うだけで それ以外は全て同じフィールドにて構成されていますので 全部コピーしたいです。 色々と調べた結果、追加クエリを使うといいみたいですが 追加クエリ自体がよく分からず質問させて頂きました。 宜しくお願い致します。

  • Accessで複数テーブルのJoin

    次のようなテーブル(T1~T4)とクエリ(Q1~Q2)があります。 クエリの表で囲っているものはAccessのQBEを表しています。 その下はAccessが自動生成したSQLです。 Accessがある場合はいいのですが、ない場合、いきなりSQLを 書かないといけないわけですが、どのような順番に並べていって いいのか整理がつきません。 4つ以上になるとさっぱりです。 何かヒントをいただけませんでしょうか? T1:売上表[売上No、日付、顧客CD] T2:顧客表[顧客CD、顧客名] T3:売上明細[ID、売上No、連番、商品CD、数量] T4:商品表[商品CD、商品名、単価] Q1: ┌────────────────┐ │日付 │ 商品名│単価 │数量 │ ├────────────────│ │売上表│商品表│商品表│売上明細│ └────────────────┘ SELECT 売上表.日付, 商品表.商品名, 商品表.単価, 売上明細.数量 FROM 商品表 INNER JOIN (売上表 INNER JOIN 売上明細 ON 売上表.売上No = 売上明細.売上No) ON 商品表.商品CD = 売上明細.商品CD; Q2: ┌────────────────────┐ │日付 │ 顧客名│商品名│単価 │数量 │ ├────────────────────│ │売上表│顧客表│商品表│商品表│売上明細│ └────────────────────┘ SELECT 売上表.日付, 顧客表.顧客名, 商品表.商品名, 商品表.単価, 売上明細.数量 FROM (商品表 INNER JOIN (売上表 INNER JOIN 売上明細 ON 売上表.売上No = 売上明細.売上No) ON 商品表.商品CD = 売上明細.商品CD) INNER JOIN 顧客表 ON 売上表.顧客CD = 顧客表.顧客CD;