Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access初・中級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10865
投稿日: 2017/07/21(Fri) 00:33
投稿者チャコール
解決済: ON
OS:Windows7/10
Access Version:Access 2003/2016

環境として、受注伝票、受注明細書、売上明細、売上伝票テーブルが存在し、それぞれには受発伝票番号が存在しています。
以下の方法でクエリーの作成し実行する場合、どちらがより良いと考えますでしょうか。
理由(処理スピード、作業効率など)を教えていただけないでしょうか。 

Accessにすこし詳しいものが2が正しいといってうるさくて仕方なく、わたし的にはSELECT文はSELECT句から読まれるのではなくて文の最後例えばWhere句から実行されると認識しているため、恒久的に実行しなければいけない場合以外、スピードや手間がかからないので1が正しいと考えています。今回はあくまでもシステムの動作の問題点をテーブル内のデータを確認することが目的なので1で十分かと思っています。アドバイスいただけないでしょうか。それぞれのテーブルのレコード件数は60万件を想定しています。

1.これらを4つのテーブルをGUIを使って受注伝票テーブルの受注伝票番号をリンクし、それを抽出条件とし値を設定しクエリーを実行する

2.まず、受注伝票テーブルに対してクエリーを作り受注伝票番号をキーとし新たに作成しテーブルを受注伝票テーブルBとして作成する。
次に、受注明細テーブルに対してクエリーを作り受注伝票番号をキーとし新たに作成したテーブルを受注明細テーブルBとして作成する。
次に、売上伝票テーブルに対してクエリーを作り受注伝票番号をキーとし新たに作成したテーブルを売上伝票テーブルBとして作成する。
次に、売上明細テーブルに対してクエリーを作り受注伝票番号をキーとした作成したテーブルを売上明細テーブルBとして作成する。
最後に、受注伝票番号ですべてをリンクし、受注伝票番号テーブルの受注伝票番号に抽出条件を設定しクエリーを実行する。

タイトルRe: 複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10866
投稿日: 2017/07/21(Fri) 14:25
投稿者ナバ
解決済: ON
こんにちは。

> 環境として、受注伝票、受注明細書、売上明細、売上伝票テーブルが存在し、それぞれには受発伝票番号が存在しています。

いくつか確認を。

Q1.
「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?

Q2.
2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
いうことですか?

Q3.
このの処理はどの程度の頻度で行われる予定ですか?

余談ですが、2。を説明するときは箇条書きにしましょう

2-1.受注伝票テーブルに対してクエリーを作り受注伝票番号をキーとしあたらに作成しテーブルを受注伝票テーブルBとして作成する
2-2.受注明細テーブルに対してクエリーを作り受注伝票番号をキーとしあたらに作成したテーブルを受注明細テーブルBとして作成する 


タイトルRe^2: 複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10867
投稿日: 2017/07/24(Mon) 01:22
投稿者チャコール
解決済: ON
> こんにちは。
>
> > 環境として、受注伝票、受注明細書、売上明細、売上伝票テーブルが存在し、それぞれには受発伝票番号が存在しています。
>
> いくつか確認を。
>
> Q1.
> 「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?
>
> Q2.
> 2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
> いうことですか?
>
> Q3.
> このの処理はどの程度の頻度で行われる予定ですか?
>
> 余談ですが、2。を説明するときは箇条書きにしましょう
>
> 2-1.受注伝票テーブルに対してクエリーを作り受注伝票番号をキーとしあたらに作成しテーブルを受注伝票テーブルBとして作成する
> 2-2.受注明細テーブルに対してクエリーを作り受注伝票番号をキーとしあたらに作成したテーブルを受注明細テーブルBとして作成する 
> ・
> ・

ナバさん

早速ご返答いただきましてありがとうございます。また返答が遅くなり申し訳ありません。
ご指摘いただいた、初期に入力した内容を一応箇条書きぽくしました。
また、いただいた質問について以下に記します。

Q1.
「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?
A1. インデックスになっていません。

Q2.
2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
いうことですか?

A2.
違う受注伝票番号を見るときは再度テーブル作成します。

Q3.
このの処理はどの程度の頻度で行われる予定ですか?
A3.
問題が発生した時だけ、データの状態を確認したいと思っています。

補足ですが、テーブル作成クエリーを実行する前は各テーブル15万件以上のデータがあり、PCのメモリーは4GB、CPU 2.5Ghzです。

お手数ですが再度ご回答いただけますとありがたいです。よろしくお願いいたします。

タイトルRe^3: 複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10868
投稿日: 2017/07/24(Mon) 10:07
投稿者ナバ
解決済: ON
おはようございます。

> Q1.
> 「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?
> A1. インデックスになっていません。
インデックス又は主キーにしていないと、そもそもかなり遅いというか、
データベースとしての利点を生かしていないことになります。
主キー設定をどうするか、まず考えましょう。

> Q2.
> 2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
> いうことですか?
>
> A2.
> 違う受注伝票番号を見るときは再度テーブル作成します。
その都度テーブルを作成するのはファイルの破損につながるので
Accessとして好ましい使い方ではありません。
全レコード削除→追加にすべきでしょう。

>> Q3.
>> この処理はどの程度の頻度で行われる予定ですか?
> A3.
> 問題が発生した時だけ、データの状態を確認したいと思っています。
頻繁でないのであれば、それほど速度を気にしなくてもよいのでは、と思います。
チャコールさんのやりかたでやってみて、それで耐えられないほど遅い(あるいは反応しない)ので
あれば一時テーブルを使う処理にしてみてはどうでしょうか。

昔はAccessの処理能力が低かったので一時テーブルを使うことがよくありましたが、
最近では適切にインデックスを作っていれば100万件程度のデータでも直接処理できたりします。

ともかく、そのあたりの手法うんぬんより、キーの付け方が第一です。

タイトルRe^4: 複数のテーブルの同じフィールドでリンクし結果を得る為の最適な方法について
記事No10869
投稿日: 2017/07/28(Fri) 20:56
投稿者チャコール
解決済: ON
> おはようございます。
>
> > Q1.
> > 「受発伝票番号」はそれぞれのテーブルでインデックスになっていますか?
> > A1. インデックスになっていません。
> インデックス又は主キーにしていないと、そもそもかなり遅いというか、
> データベースとしての利点を生かしていないことになります。
> 主キー設定をどうするか、まず考えましょう。

承知しました。早速実施します。
>
> > Q2.
> > 2.の「あらたに」はその処理を行うたびにテーブルを作成する(あるいは全レコード削除→追加)と
> > いうことですか?
> >
> > A2.
> > 違う受注伝票番号を見るときは再度テーブル作成します。
> その都度テーブルを作成するのはファイルの破損につながるので
> Accessとして好ましい使い方ではありません。
> 全レコード削除→追加にすべきでしょう。

ファイル破損に繋がるのですね。承知しました。
追加に変更します。

>
> >> Q3.
> >> この処理はどの程度の頻度で行われる予定ですか?
> > A3.
> > 問題が発生した時だけ、データの状態を確認したいと思っています。
> 頻繁でないのであれば、それほど速度を気にしなくてもよいのでは、と思います。
> チャコールさんのやりかたでやってみて、それで耐えられないほど遅い(あるいは反応しない)ので
> あれば一時テーブルを使う処理にしてみてはどうでしょうか。
>
> 昔はAccessの処理能力が低かったので一時テーブルを使うことがよくありましたが、
> 最近では適切にインデックスを作っていれば100万件程度のデータでも直接処理できたりします。
>
> ともかく、そのあたりの手法うんぬんより、キーの付け方が第一です。

ナバさん

いろいろとアドバイスいただきましてありがとうございます。とても助かります。

また私のやり方を肯定していただける意見をいただけて嬉しく思っております。もう少しAccessを勉強してナバさんみたいになりたいです。

ありがとうございました。

P.S.
お礼の返事が遅くなり申し訳ありませんでした。販売管理システム(oracle,.net)の既存バグ分析のため毎日深夜帰りだったものですから遅くなってしまいました。またAccessやExcelのマクロやフォームの設定及びODBCでの接続先データベースのテーブル定義も変更していないのに突然エラーになるような原因不明のエラーにも遭遇してしまいとんだ1週間でした。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る