
現在、リンクテーブルに対し、以下のクエリを作成しております。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
住所のDBテーブル、マスターの...
-
「テーブルに座って……」という...
-
男性と2人で飲食店に行きテーブ...
-
【エクセル】データテーブルの...
-
AccessのSQL 部分一致したデー...
-
降順で並び替えて昇順で受け取...
-
構造が同じ別テーブルInsert In...
-
テーブルの凸凹の修復
-
アクセス2010について
-
mysql alter table 終わらない
-
Excelのテーブルでmatch関数の...
-
Excel テーブル内の空白行の削除
-
SQL 複数テーブルのupdate
-
SQliteの日付検索について
-
カラム位置変更
-
下記、問題に対しての解答が以...
-
一致するデータのみ削除したい
-
コンボボックスにレコードセッ...
-
論理名とコメント構文(?)について
-
データベースを複数作ったほう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Oracleで上書きImportはできま...
-
ビューのソートについて
-
このISAMでは、リンクテーブル・・
-
テーブルで一番古いレコードだ...
-
アクセス レコードセットを更...
-
Accessのテーブルデータを一気...
-
SQLです教えてくださいお願いし...
-
accessでレコード更新直後の反...
-
結合テーブルでINSERTする方法...
-
ODBC接続で新しいレコードを追...
-
マテリアライズドビューとスナ...
-
ORA-01401が表示され、データが...
-
Accessでの稼働日数計算の方法
-
処理の途中で停止させ、再開さ...
-
「クリップボードにコピーされ...
-
SQL文の結合(一対多)がわから...
-
構文エラー : 演算子がありませ...
-
Accessのインポートについて(上...
-
テーブル作成について
おすすめ情報