0

ネストされた SQL 全体と複数ステートメントの SQL プロシージャの両方で達成できるタスクに直面しています。パフォーマンスに応じてどれを選択するか、どのように評価して比較できるかを考えています。

これが私の場合です。一部の顧客は名前を変更しました。私の仕事は、OLD_NAMENEW_NAMEを含むMAPPINGテーブルを介してCUSTOMERテーブルの列NAMEを更新することです。

ネストされた SQL を記述できます

update CUSTOMER set NAME = (select NEW_NAME from MAPPING where OLD_NAME = NAME) 
where NAME in (select OLD_NAME from MAPPING)

ループと条件付きクエリの手順

for record as
  select NAME from CUSTOMER
do
  select NEW_NAME into newName from MAPPING where OLD_NAME = record.NAME;
  if newName is not NULL then
    update CUSTOMER set NAME = newName where NAME = record.NAME;
  end if;
end do;

もちろん、2 つ目については、更新ステートメントを prepare と execute でキャッシュするようにしたほうがよいでしょう。

私の質問は、どちらが優れているかです。それとも両方ともばかげています。彼らのパフォーマンスを分析する方法を教えてください。

個人的には、ネストされた SQL は MAPPING テーブルを 2 回スキャンする必要があるため (where & set 句)、プロシージャ 1 の方が優れていると思いますが、よくわかりません。

4

1 に答える 1