次のようなクエリがあります。
select X.id_x, A.id_a, B.id_b
from X
left join A on 'A|' + A.id_a = X.id_aOrB
left join B on 'B|' + B.id_b = X.id_aOrB
X は A または B にリンクされ、id は結合ステートメントで計算されます。
- X: 8 000 行
- A: 36,000 行
- B: 3,000 行
このクエリは非常に遅く、10 秒程度です。にインデックスがありませんX.id_aOrb
。
'A|' + id
次に、トリガーによって更新される 2 つの「結合」テーブルを使用すると、 andを連結する必要はありません'B|'+id
。結果は 1 秒未満で取得されます。わかった。
私の質問: なぜこの連結はとても遅いのですか? データが多すぎる場合、SQL Server は '+' であまり効率的ではありませんか?