私の経験では、クエリが複雑になるほど、SQL オプティマイザーが巧妙な計画を作成できなくなります。ここには 16 個の結合があり、一部またはほとんどが外部結合であり、少なくとも 1 つのサブクエリがあります...十分な数のインデックス、カーディナリティ、ビュー、外部適用をトスし、他に何を知っているのか、Microsoft でさえ誰も知りませんエンジニア*は、最適な計画を均一かつ定期的に生成するルーチンを見つけ出すことができます.
あなたが説明したこと、私は何度も経験しました - 厄介なクエリで1つの単純なことを変更すると、すべてが桁違いに速くなります(または、歯ぎしり、遅くなります)。コンプレックスが複雑すぎるかどうかを判断する方法はありません。それは何よりも感覚です。私の一般的な経験則は、長すぎたり複雑すぎたりする場合は、事前に選択された単一のネストされた値など、できる限り単純化するか、クエリの一部を常によりも単純化することです。 小さな結果セットで高速に実行し、最初に実行して結果を一時テーブルに保存します。
( * これは軽度の皮肉であることに注意してください)