- 締切済み
accessの処理が遅い
accessの処理が遅く困っています。 何か良い解決方法があればご教授お願いいたします。 まずは現状を説明いたします。 仕事でaccessを使用していますのでどこまで話していいのか迷うとこですがなるべく詳しく書きたいと思います。 まずは私の現状を ・accessは利用歴半年ほどでまだまだ全然理解していない ・職場で必要に迫られて独学で勉強しています ・私的には頑張ってネットや書籍で色々と調べてみました 仕事場で行なっていること ・職場の基幹システム(これが何で作られているとかはさっぱり分かりません)は次のようなデータを処理しています。顧客データ、在庫管理、作業履歴、入出庫管理などなど ・上記の基幹システムが毎日「データ」という名前の圧縮ファイルを本社サーバにエクスポート?していきます ・私はのそ「データ」という圧縮ファイルを使って作業を(主にデータ分析)を行なっています ・「データ」を回答すると「データ1」「データ2」「データ3」「データ4」という4つのMDBファイルが出てきます ・私はその「データ1~4」のMDBファイルを自分の支店の共有フォルダにコピーして作業を行なっている ・ローカルのPC上ではなくネットワーク上にファイルを置くのは、支店内の全員のパソコンからアクセス出来るようにとのことです 問題となっている処理に時間のかかる処理内容というのが クエリを多重で行う(言い方が合っているのか?^^;)ということを5段位行っています 遅いのは当たり前というのはわかって入るのですが、1度のクエリで目的のものを表示させられないので結果こうなりました(ーー; 他にも遅くなっている理由があります 「データ1」などの元となるMDBファイルに入っているテーブルを全てリンクデーブルで参照しています(言い方あってるかな?) なぜ普通にインポートして使わないのかという理由を説明します。 ・「データ」というファイルは毎日、新しくシステムから落ちてきます ・私としては毎日行うクエリを再利用したい ・「データ1」というファイルをある場所に置いておき、自分のデスクトップにMDBファイルを作成し(これを作業ファイルと呼ぶ)、そこに「データ1」の中のデーブルをリンクさせておく。 そして作業ファイル内にクエリを作製する あとは毎日の新しい「データ」ファイルを過去のファイル(作業ファイルにインポートしたリンク先)に上書き保存する。 こうすることでクエリを作製し直さないで同じクエリを再利用し、表示されるデータは毎日最新をキープする。これが理由なんです。 (本当は作業ファイルもネットワーク上に置きたいのです、というか置いていました。しかし遅すぎるため今は取り敢えずデスクトップ上に置いています) しかしこのクエリが多重で行われているためか結果を表示するのに3分~5分かかります。 これを早くしたいのです。 上記の方法におかしな所や、こうしたほうがより早くなるなどのアドバイスがあればお願いします。 そして別件ですが、こういった状況ですので個人的に色々調べてみました。 どうもaccessは大きなデータには向いていない?というような情報を目にします。 「データ1」などのMDBファイルにあるデーブルは100万行などのテーブルもあります。 MDBファイルの容量も2GBギリギリです。 こういう場合はMYSQLやsqliteなどを使用したほうが良いのでしょうか? そういったものを使用した場合は今のaccessのようにGUIで簡単にクエリなどを作成できますでしょうか? そういたものを使用してMDBファイルを扱えるのでしょうか? 非常に分かりにくい質問で申し訳ございませんが宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
> そのソフトを私のデスクトップにインストールするのでしょうか? はい、そうなります。 > SQL Serverというソフトなら基幹システムから落ちてくるMDBファイルを今のように扱えるのでしょうか? MDBにあるデータ(テーブル等)をインポートして使うことになります。 単体ではもしかすると使い辛い部分があるので、フロントエンドはAccessをお使いになられた方が良いかもしれません。 参考書など多数出てますので・・・それぐらいは経費でなんとか・・・ 現在サポートされている(といってもセキュリティパッチがダウンロードできますよの意味)SQL Server Expressは以下にあります。 バージョンが新しいほど、必要なスペックはあがるとお考えください。また、対象OSも異なりますので、それぞれリンク先を確認してください。 Microsoft SQL Server 2005 Express Edition Service Pack 3 http://www.microsoft.com/ja-jp/download/details.aspx?id=15291 Microsoft® SQL Server® 2008 R2 SP2 - Express Edition http://www.microsoft.com/ja-jp/download/details.aspx?id=30438 Microsoft® SQL Server® 2012 Express http://www.microsoft.com/ja-jp/download/details.aspx?id=29062
> ・インターフェース→access > ・データーベースエンジン→sqlite > ・ファイル(データそのもの?)→mdb 大抵のデータベースは、エンジンとファイルは一体化しています。エンジンが理解できるファイル形式であることが、一番の効率化となりますので、高速化という要件から外れます。 同じことはインターフェースにも言えますので、分けてしまうことは、高速化から外れてしまいます。 条件が厳しいようですが、高速化および簡便化を目指して、稟議を掛けるなど検討されてはいかがでしょうか。 --- どうしてもデスクトップでやるなら・・ ・64bitOSにする(メモリたくさん使うなら必須、サーバーでなくともOK) ・メモリを積む(複数テーブルのクエリなどはメモリが多いほど早くなるはず) ・mdbと親和性の高いSQL Server (Expressなら無償)導入 でしょうか。
cafetabacoさんがやろうとしている処理は、データ量からして基幹側で処理するべき作業と思われます。 それが出来ないのは、そのクエリ実行が、cafetabacoさんの部門でしか使えない個別要件のものなのか、情シス部門が能力がないのか、ガチガチパッケージを導入しているのかどれかです。 (おそらく一番後者で、解析・レポートは別オプションで馬鹿高い) 手っ取り早く感じるのは、上位のデータベースソフトに乗り換えることですが、件数からすると、「デスクトップでやっている限りでは早くならない」と感じられました。 少なくとも専用サーバーを準備して、メモリをたくさん積んで、システム構築するのが近道でしょうか。 でも、mdbからインポートが面倒な気がしますので、SQL Server Expressが一番手っ取り早いのでは? --- 小手先のチューニングとしては、クエリーの最適化とかあるやも知れませんが、Accessではすぐ限界に達します。
補足
有難うございます。 私も本社の考えはさっぱりわからないのです(ーー; しかし何にせよ、 本社側では分析をしない 基幹システムに変更は不可 サーバを用意するなども不可 あくまでも私のデスクトップと支店の共有ネットワークだけを使用する この条件でやらなくてはなりません sqliteやMYSQLは速いとネットで書かれているのですが MDBファイルをそれらの速いソフトで処理することは不可能なのでしょうか? 調べてもいまいちその辺が理解できません データーベースソフトと言うのは3つに分かれているのでしょうか? ・インターフェース ・データーベースエンジン ・ファイル(データそのもの?) それならば ・インターフェース→access ・データーベースエンジン→sqlite ・ファイル(データそのもの?)→mdb こんな仕様方法は出来ないものでしょうか?(^^;
- 原沢 信道(@nharasawa)
- ベストアンサー率53% (90/168)
単に遅いのであれば高性能のマシンに置き換えれば解決します。ACCESSは比較的小規模のシステム用でかつ個人で使う事を想定した物ですのでこのままでは無理な可能性が有ります。全体最適を狙った場合は基幹システム側に現機能を統合する方法が一番良いと思います(私ならそうします)。基幹システムで統合できない場合は共有利用を想定したRDBMSに落として対応すると良いと考えます、お勧めはMicrosoftSQL Server2012(または2008)Express Editionです,無償ですしACCESSで動くレベルの小規模システムであれば十分使えます。尚、SQLだけではシステムが作れないので他のプログラミング言語が必要です。ちなみに、私もSQLでシステムを作るための言語(ツール)を作っています。
補足
有難うございます。 基幹システムの変更は出来ません^^; >基幹システムで統合できない場合は共有利用を想定したRDBMSに落として対応すると良いと考えます、お勧>めはMicrosoftSQL Server2012(または2008)Express Editionです,無償ですしACCESSで動くレベルの小規>模システムであれば十分使えます。尚、SQLだけではシステムが作れないので他のプログラミング言語が必>要です。ちなみに、私もSQLでシステムを作るための言語(ツール)を作っています。 私の能力が低いため、よく理解できませんでした。 基幹システムを作り変えるということでしょうか? 基幹システムは毎日「データ」という名のMDBファイルを落としてきます。 これは変えることはでいません。 私はあくまでもこのMDBファイルを使用して仕事をするしかありません。 自分が使っているPCのグレードアップも出来ません。 上記状態でMDBファイルをaccessで行なっているような。GUIで同じようなクエリを行い、現状より早く結果を手に入れる方法を見つけたいのです^^; やっぱりsqliteやMYSQLなどを使用してもそうはならないのでしょうか?^^;
補足
有難うございます。 稟議を掛けることは残念ながら不可能でございます(;; 64bit、メモリは理解できます。 >・mdbと親和性の高いSQL Server (Expressなら無償)導入 >でしょうか。 この部分がよくわからないのです。 そのソフトを私のデスクトップにインストールするのでしょうか? SQL Serverというソフトなら基幹システムから落ちてくるMDBファイルを今のように扱えるのでしょうか?