2
結合述語で変数を参照すると、ネストされたループが強制されるのはなぜですか?
最近この問題に遭遇しましたが、オンラインで議論することができませんでした。 以下のクエリ DECLARE @S VARCHAR(1) = ''; WITH T AS (SELECT name + @S AS name2, * FROM master..spt_values) SELECT * FROM T T1 INNER JOIN T T2 ON T1.name2 = T2.name2; ネストされたループ計画を常に取得します 問題INNER HASH JOINまたはINNER MERGE JOINヒントで問題を強制しようとすると、次のエラーが生成されます。 このクエリで定義されたヒントのため、クエリプロセッサはクエリプランを作成できませんでした。ヒントを指定せずに、SET FORCEPLANを使用せずに、クエリを再送信します。 ハッシュ結合またはマージ結合の使用を許可する回避策を見つけました-変数を集約にラップします。生成された計画は大幅に低コストです(19.2025対0.261987) DECLARE @S2 VARCHAR(1) = ''; WITH T AS (SELECT …