現在、リンクテーブルに対し、以下のクエリを作成しております。
1.Q_在庫:在庫を品番で集計する。
[結果]
品番 在庫
A 100
B 20
2.Q_受注:受注データの残数を集計する。
[結果]
ID 品番 納期 予定数 合計数
1 A 20080625 10 10
2 A 20080626 50 60
3 A 20080627 100 160
3.Q_可否:Q_在庫とQ_受注を品番でリレーションし、在庫行を付加し、
在庫が合計数を上回っていれば"○"を表示する。
[結果]
可否 ID 品番 納期 予定数 合計数 在庫
○ 1 A 20080625 10 10 100
○ 2 A 20080626 50 60 100
× 3 A 20080627 100 160 100
このとき、Q_可否を実行すると、20秒くらいかかってしまい、
パススルークエリのほうがよいのかな?と考えています。
ただ、私以外の人が後から変更などする場合、
長いSQL文はわかりづらいだろうとも考えます。
どちらかを犠牲にするしかないのでしょうか。
もっと良い方法があるのでしょうか。
漠然とした質問で申し訳ありませんが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
Q、棚卸しの手法。
A、棚卸一時テーブルを一気に作成。
これで、サーバーの関連テーブルとのアクセスは全て終了。
で、関連テーブルは、他のクライアントに開放できます。
で、参照や印刷では棚卸一時テーブルを利用。
Access のリンクテーブルはその都度に全てのデータを取り込んで処理。
そのデータを参照する都度に再び全てのデータを取り込んで処理。
これを二重、三重に仕掛ければ処理が遅くなるのは必定。
最初から3を作成しても1万件でも1、2秒かと思います。
で、表示は時間計測不能かとも・・・。
この回答への補足
回答ありがとうございます。
>Access のリンクテーブルはその都度に全てのデータを取り込んで処理。
>そのデータを参照する都度に再び全てのデータを取り込んで処理。
>これを二重、三重に仕掛ければ処理が遅くなるのは必定。
やはりそうですよね。
他の者に聞いたところ、私よりももっと初心者のため、
後から変更することはないとのことでした。
リンクテーブルをやめ、パススルークエリで一時テーブルに
INSERTする方向でいきたいと思います。
No.2
- 回答日時:
元のDBシステムが何だか分かりませんが、以下のようにすれば
効率は改善されると思います。
(1)Q_在庫の品番をプライマリキーにする
(2)Q_受注の品番にインデックスを付ける
(3)Q_在庫の品番とQ_受注の品番の間でリレーションシップを設ける
(4)SQL文にDISTINCTを付けない
この他、DBシステムによっては条件式の書き方、大文字小文字の統一
くらいでも処理速度に差が出ることが、しばしばあります。
3.Q_可否のような結果を求めるSQLはさほど複雑とは思えません。
よほど言語体系の異なるSQLでなければ、保守性の心配は少ないと
思います。但し、処理速度の足を引っ張っている原因は色々あるので、
パススルーにして、劇的な改善が得られるかどうかは不明でしょう。
この回答への補足
回答ありがとうございます。
ACCESS2003とSQLSERVER2000を使用しています。
>(4)SQL文にDISTINCTを付けない
について調べ、existに変更しました。
また、パススルークエリに変更したところ、2,3秒になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ビジネススキル・経営ノウハウ) 在庫管理のこの問題が分かりません。どなたか解説お願いします 2 2022/04/18 18:35
- 数学 在庫管理のこの問題が分かりません。どなたか解説お願いします 4 2022/04/18 22:19
- 数学 在庫管理のこの問題が分かりません。どなたか解説お願いします 2 2022/04/18 22:21
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- メルカリ メルカリShopsを作るとメルカリで販売は楽になりますか メルカリとまったく変わりませんか? 2 2022/10/11 19:22
- Excel(エクセル) Excelで在庫表(クエリ、ピボット) 2 2022/04/11 17:11
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- Excel(エクセル) 荷捌作業効率をあげるためのエクセル関数を教えてください。 8 2022/10/07 08:17
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(Microsoft Office) Excelの関数(FILTER関数)について教えてください 2 2023/07/31 16:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
accessでレコード更新直後の反...
-
結合テーブルでINSERTする方法...
-
htmlコードで書かれた表にphpで...
-
Accessでの稼働日数計算の方法
-
テーブルで一番古いレコードだ...
-
Access昇順レコードを、5分割...
-
access2000 オートナンバーで...
-
ビューのソートについて
-
削除したテーブルを元に戻すこ...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
「クリップボードにコピーされ...
-
ACCESS2000でのリンクテーブル...
-
Oracleで上書きImportはできま...
-
IF NOT EXISTを使用するINSERT文
-
VBAでSQLServerへのODBC接続
-
CONNECT BYに関して
-
mysqlへの書き込みがリロードす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
Oracleで上書きImportはできま...
-
テーブルで一番古いレコードだ...
-
accessでレコード更新直後の反...
-
ビューのソートについて
-
このISAMでは、リンクテーブル・・
-
同一テーブルのデータを参照し...
-
アクセス レコードセットを更...
-
マテリアライズドビューとスナ...
-
住所のDBテーブル、マスターの...
-
ACCESSで容量が50MBになった...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
結合テーブルでINSERTする方法...
-
SQL文の結合(一対多)がわから...
-
ERROR1062:Duplicate entry.......
-
IF NOT EXISTを使用するINSERT文
-
htmlコードで書かれた表にphpで...
-
Accessのインポートについて(上...
おすすめ情報