アプリ版:「スタンプのみでお礼する」機能のリリースについて

accessからsqlserverへの移行について!
現在accessでシステム運用しています。
処理に時間がかかるのでDBのみsqlserverへの移行を検討しています。

時間がかかる原因は計算項目が多く計算の為に必要な定義項目と参照項目で計算項目を含めると約300項目となります。
この為、クエリーをNo.1とNo.2の2個のクエリーに分けて対処しています。
クエリーNo.2はNo.1の式の値を使用し更に式で計算しています。
クエリーで定義している計算式も条件が複雑なものもありさらに計算結果⇒計算結果⇒・・・・となっています。

この様な内容なので入力画面はレスポンスが遅く印刷は5~10分位かかるものがあります。
とりあえず印刷処理を早くしたいと思い一旦ワークテーブルに必要項目を出力する等をやって見ましたがやはり抽出に時間がかかりあまり改善しません。
データ件数は約3万件なのでデータ件数は問題ないと思っています。

accessの処理はそのままでDBをsqlserverからODBCでリンクしようと思います。
DBをsqlserverに移行することで処理速度の改善はどの程度見込めるのでしょうか。
計算項目数が多いのであまり見込めないのではと思っています。

accessからsqlserverへの移行された方でどの位改善されたのか教えて下さい。

現在の運用環境はサーバは使用せずファイル共有で4台のPCで運用しています。OSはWinXPです。
今回も専用サーバは使用せず現在のWinXPのPCにSQLServer2005無料を使用しようと思っています。

又、accessの処理で他に早くする方法がありましたら教えて下さい。

よろしくお願いします。

A 回答 (3件)

accessだから遅く、sqlserverだから速いという


単純なものではありません。やはり、エンジンを
置くPCの性能がカギで、これが遅いのでは期待は
できないとしたものです。聞けば同じマシンで代替
するとのことなので、あまり期待しない方がよい
と思います。accessのイヤな所は挿入/削除を
繰り返すと、デッドスペースが増加するだけでなく、
インデックスも最適な状態からかけ離れていくこと
です。従って、度々最適化する必要があります。

DBの設計方針が分からないので何とも言えませんが、
抽出条件に使う可能性が高い項目にはインデックスを
置くとか、マスタを持つコード項目はリレーションを
張ることで速度が改善されます。特に昔の遅いDBでは
リレーションの設計は最大のポイントでした。

SQLの組み方が拙いため遅い可能性もありますが、
accessやsqlserverはスマートな方で、影響は少ない
でしょう。例えば、a=1 or a=2 より a in (1,2)の
方がaの参照が1回なので、若干高速です。(気休め程度)

尚、sqlserverには一時テーブルと言うのがあり、
対象レコードを減らしておいて処理することができます。
これは便利な機能で、大いに助かるところです。
尚、ODBC接続したテーブルにDLookupなどDxxx関数を
使うと、極端に遅くなることがあります。これらの
関数を多用している場合は注意が必要です。

この回答への補足

回答ありがとうございます。

現在のマシン3年前に購入したPentium4の2.40GHzメモリは1Gで遅いマシンでは無いと思っています。
ファイル共有している他のマシンも同等です。

それから仰るとおりにaccessを最適化すると早くはなります。
sqlserverにすればその必要が無いので移行の検討材料の1つに上げています。
又、インデックスは必要と思われる項目には設定し、リレーションも張っています。

回答頂いた内容からして専用サーバを検討した方がいいのでしょうね。
専用サーバも高価なものは買えないので性能的には現在のPCの性能と同等程度となります。
専用サーバを設置しサーバOSにするとにより処理速度はかなり速くなるのでしょうか。

よろしくお願いします。

補足日時:2010/08/25 21:28
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2010/08/27 14:45

ディスクアクセスと比べれば計算は非常に高速です。


計算が多いから遅いということは、あまり考えられません。

3万件のテーブルだけを使用しているのですか?
複雑な計算をしてるなら当然複数のテーブルを使用してますよね。

それら複数のテーブルをサーバーに置いてリンクテーブルにし、
従来通りのクエリーをそのまま使った場合は、確実に遅くなります。

高速化にはそれなりのテクニックが必要です。
方法はケースバイケースですので、実際のクエリーを見てみないと分かりません。

この回答への補足

回答ありがとうございます。

クエリーで使用しているテーブルはマスタやデータ含め4テーブルをリンクしています。

>従来通りのクエリーをそのまま使った場合は、確実に遅くなります。
これはサーバを立ててsqlserverに移行した時のことでしょうか。

VIEWを使用すれば遅くはならないでしょうか。

>高速化にはそれなりのテクニックが必要です。
何か参考になるサイトはご存知無いでしょうか。・

よろしくお願いします。

補足日時:2010/08/25 23:28
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2010/08/27 14:47

>やはり抽出に時間がかかりあまり改善しません



とのことですので、計算式なしで[select * from ...等]にしてみて流してみてください。
ここが遅いのであれば、索引等をつければ早くなる可能性はあります。

また、上記の条件でどれだけデータがヒットするのかが問題となります。
3万件全て取ってきてから計算する作りだと厳しいです。

Accessは一旦、データをローカルに持ってきてから計算するので、ネットワークの速度も関係してきます。

この回答への補足

回答ありがとうございます。

計算式無しで早くなった時、必要な計算値はどのようにして取得しておられるのでしょうか。
計算式⇒計算式⇒・・・等で求めている値は40個ぐらいあります。

インデックスは必要と思われる項目には設定し、リレーションも張っています。

対応されておられる方法がありましたら教えて下さい。
よろしくお願いします。

補足日時:2010/08/25 21:40
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2010/08/27 14:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す