ネストされた SQL 全体と複数ステートメントの SQL プロシージャの両方で達成できるタスクに直面しています。パフォーマンスに応じてどれを選択するか、どのように評価して比較できるかを考えています。
これが私の場合です。一部の顧客は名前を変更しました。私の仕事は、OLD_NAMEとNEW_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 の方が優れていると思いますが、よくわかりません。