Microsoft Access 掲示板

D系のSQLの高速化について

2 コメント
views
4 フォロー

早速ですが、人ごとに兼務組織(3階層)とその他属性の新旧比較を行い、相違フラグを立てたいと思っています。

旧組織テーブル
ID:101 氏名:青山 恭子 連番:1 組織1:AAA 組織2:FF 組織3:H 職位:課長
ID:101 氏名:青山 恭子 連番:2 組織1:BBB  組織2:RR 組織3:K 職位:課長
ID:101 氏名:青山 恭子 連番:3 組織1:
ID:101 氏名:青山 恭子 連番:4 組織1:
ID:101 氏名:青山 恭子 連番:5 組織1:

新組織テーブル
ID:101 氏名:青山 恭子 連番:1 組織1:AAA 組織2:AAA 組織3:AAA 職位:課長
ID:101 氏名:青山 恭子 連番:2 組織1:BBB  組織2:AAA 組織3:AAA 職位:課長
ID:101 氏名:青山 恭子 連番:3 組織:
ID:101 氏名:青山 恭子 連番:4 組織:
ID:101 氏名:青山 恭子 連番:5 組織:

新旧テーブルのユニークなIDと連番をキーに、組織・その他属性の文字列を連結させた連結フィールドをつくり、
この新旧の連結フィールの文字列を比較日、レコードごとに変更の有無をフラグ立て(変更フラグ)しています。

この時、人ごとにひとつでも変更フラグが立った場合、人全体に変更フラグ2を立てたいと思っています。
現状、クエリの演算フィールドで人ごとにDsumで判定フラグの論理値(変更あり:0/変更なし:-1)を加算し、
-6以外であれば、人に対し、変更フラグ2を立てるという方法を試していますが、D系の関数が遅くて使い物になりません。

高速化するためのSQLについてご相談させてください。

kazu
作成: 2023/01/06 (金) 13:48:47
通報 ...
1
りんご 2023/01/06 (金) 14:27:43 4d616@0e907

まず、現在のSQLを提示する事は可能でしょうか?
次に、テーブルを説明して下さい。組織1と組織2の違いは?連番1組織1と連番2組織1の違いは?旧組織テーブルに新しい連番を追加する場合と新組織テーブルに新しい連番を追加する場合がありそうだけど、使い分けのルールは?

2

りんごさんも確認されてますが、詳細が分からないので、具体的な回答は難しいので、とりあえず高速化の一般論を提示しておきます。

  1. D系の関数を、サブクエリに置き換える。
  2. リンクフィールドや集計フィールドにインデックスを設定する。
  3. 集計の途中結果を格納する一時テーブルを作成してそれを利用する。
  4. 判定フラグフィールドを追加して、VBAで更新する。

どのようなことがしたいのかによって、上記のどれがいいのか、あるいは、上記のいくつかを組み合わせるがいいのか、変わってきます。