• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VIEWのレスポンス改善について)

VIEWのレスポンス改善について

このQ&Aのポイント
  • オラクル10gでのレスポンス改善について勉強中です。MASTER_CODEテーブルを使用してVIEWを作成しましたが、SQLの書き方に問題があります。マスターを参照する際、コードではなく名称で取得できるVIEWを作成したいと考えています。
  • トランザクションテーブルからマスターを参照するため、MASTER_CODEテーブルから特定の区分とレベルでコードと名称を取得しています。しかし、この方法ではレスポンスが悪くなることがあります。
  • 同じMASTER_CODEを使用しているので、より効果的な方法があるか教えてください。目標は、コードではなく名称で取得できるVIEWを作成することです。

質問者が選んだベストアンサー

  • ベストアンサー
  • uresiiwa
  • ベストアンサー率45% (49/107)
回答No.1

このSQL内容であれば、以下のようにスカラー副問い合わせ(SELECT文の中に入っている、単行を返すSELECT文)を使うのがベストだと思います。また、もしマスタに「区分+レベル+コード」のインデックスがなければ追加してください。 スカラー副問い合わせはマスタから名称を取るような場合に最適な方法のため、元SQLがうまく最適化されていれば同等のパフォーマンスとなる可能性もありますが、良くなることはあっても悪くなることはない書き方になります。(今回の場合。) 厳密な比較のためには、元SQLと実行計画やSQLトレースを比較してみてください。 (インデックスのほうが原因という可能性もありますね。) ------------------------------------------------------------------ select A.連番 , A.支店コード , A.部署コード , A.課コード , A.得意先コード , A.得意先住所コード , (select 名称 from MASTER_CODE where 区分=1000 AND レベル=1 AND コード = A.支店コード) AS "支店名" , (select 名称 from MASTER_CODE where 区分=1000 AND レベル=2 AND コード = A.部署コード) AS "部署名" , (select 名称 from MASTER_CODE where 区分=1000 AND レベル=3 AND コード = A.課コード) AS "課名" , (select 名称 from MASTER_CODE where 区分=1100 AND レベル=1 AND コード = A.得意先コード) AS "得意先名" , (select 名称 from MASTER_CODE where 区分=1100 AND レベル=2 AND コード = A.得意先住所コード) AS "得意先住所" from TRAN_TABLE A ;

6mmruled
質問者

お礼

早急な回答ありがとうございました。 本日、試してみました。 かなりのレスポンス改善があり、驚きました。 質問内容では、1組の例を記載していましたが 実際は上のようなVIEWをさらに5個結合させていましたので 15倍から30倍の速さのレスポンスになりました。 SQL文もシンプルになり助かりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A