前提
「該当のソースコード」に記載しているクエリをSqlServerで実行すると処理速度が遅い時と早い時があります。
実現したいこと
処理速度を速くしたいです。
発生している問題・エラーメッセージ
実際の実行プランは以下のようになっています。
遅い時にはCompute Scalarが行われており、ここで再バインドの推定数が103433となっているためと推測しましたが、Compute Scalarを回避するにはどうしたらよいのか見当がつきません。
- 速い時の実行プラン
- 遅い時の実行プラン
Joinしているテーブルのレコード件数及び内容は変わっていないのですが、遅くなる原因は何が考えられるでしょうか。
どのようにすればCompute Scalarを回避できるでしょうか。
該当のソースコード
SELECT b.DATA, a.TAG, a.SI_CODE, b.UNIQUE_KEY, a.PG, a.CLM_NO, a.KO_NO, b.TK_KBN_NO, b.TK_KBN_EDA, b.Z_KBN, a.Y_ID, a.CLM_GR FROM LEFT_TBL AS a
LEFT OUTER JOIN(
SELECT HO_XML_ID, Y_VER, KO_NO, CLM_NO, CLM_GR, DATA, SI_CODE, PG_NO, Z_KBN, S_KBN, S_NUM, UNIQUE_KEY, TK_KBN_NO, TK_KBN_EDA FROM RIGHT_TBL WHERE S_KBN = 11 and S_NUM = 0
)AS b
ON
a.Y_ID = b.HO_XML_ID AND
a.SI_CODE = b.SI_CODE AND
a.KO_NO = b.KO_NO AND
a.CLM_GR = b.CLM_GR AND
a.CLM_NO = b.CLM_NO AND
a.S_KBN = b.S_KBN AND
a.S_NUM = b.S_NUM AND
a.PG = b.PG_NO
WHERE a.S_KBN = 11 AND a.S_NUM = 0 AND a.KO_NO <> 0
ORDER BY a.Y_ID, a.SI_CODE, a.PG, a.CLM_GR, a.CLM_NO;
試したこと
- 主キーの再作成を行っても速度は変わりませんでした。(INDEXは主キーとしているフィールドのみで他のINDEXは存在しません。)
- LEFT_TBLに別のINDEXを作成しても速度は変わりませんでした。
- ORDER BY句を外すと格段に速くなりました。
補足情報(FW/ツールのバージョンなど)
SQL Server2019
- LEFT_TBLの詳細
- RIGHT_TBLの詳細
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/28 05:08
2022/11/28 05:33
2022/11/29 02:58
2022/11/29 03:03