- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MDB→SQL Server Expressの移行)
MDB→SQL Server Expressの移行
このQ&Aのポイント
- MS ACCESS 2003で作られた業務管理システムをSQL Server 2008 Expressに移行する作業を行なっています。
- 現在のシステムはFORM.MDB(インターフェースのみ)とDATABASE.MDB(データのみ)で構成されていますが、移行後はFORM.MDB(インターフェースのみ)とSQL Server 2008 Express(データのみ)となります。
- 移行後の照会画面でのデータの表示速度が低下しているため、SQL Server側でビューを作成し、クエリの代わりにビューを使用する方法を試しています。しかし、スクロールやページ移動をすると表示に遅延が生じてしまいます。ACCESSのクエリをSQL Serverのビューに置き換える方法以外でレスポンスアップが望める方法を探しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Accessは勝手にSQLを投げます。これはODBCなどの仕様にもなります。 要するにAccessは一人で使うもの。だからリソースをふんだんに使ってよいという設計になってます。 SQLサーバーに限らずOracleでも複数人で使うDBはPG側で考慮が必要なので、TBをスクロールするなどの処理は避けます。というような基本的な事は後で学んでください。 パフォーマンスを上げる事だけに特化すれば、まずその情報は何を基準に検索するのか。どのキーでビューを作成しているのか。 キー項目ならインデックスは自動で付加されますが、キー項目以外でリレーションを張る場合は、対象の項目にインデックスを張る。さらに検索対象の項目にもインデックスを張ります。 インデックスは多ければ今度は更新時に遅くなります。その辺はDB設計に考慮を組み込んでおきます。 またAccessはテーブルリンクは使わない。TBになるものを全てパススルークエリで作ります。 つまりAというTBをリンクするのではなく、SELECT * FROM Aというクエリをパススルー定義で作り参照するという苦肉の策です。本来は目的の情報だけをAccess側で扱うようにするため、SELECT XXX,XXX,XXX,XXX from A Where XXX = 'YYY' とちゃんとそのたびにクエリをパススルーで投げるのが一番です。そのためにはパススルークエリをADOXでそのたびに作成する必要があります。 そこまでやるなら、VBAで全て書き直しEXCUTEした方が早いです。 さらに早くするのはストアドプロシージャをSQL上に作成し、変数を投げて結果だけを取得するなどしてください。
お礼
返答ありがとうございます。 お礼が遅くなり申し訳ありません。 インデックスの付加を試してみたのですが時間短縮とはなりませんでした。 本来であればIDii24さんがおっしゃるようにパススルークエリで作成し直せば良いのですが 今回はできるだけ少ない工数での提案(まだお客様に提案する段階です)でしたので そちらの方法は厳しそうです。 ありがとうございました。