ユーザーが SQL Server 2008 データベースに対して SQL ステートメントを実行するマスクを持っているアプリケーションがあります。さらに、ユーザーはマスクにパラメーターを設定できます。「飛行機」と「車」の 2 つの選択肢を持つドロップダウンである、1 つのパラメータを持つマスクを考えてみましょう。
ユーザーが「車」を選択して「実行」ボタンを押すと、マスクで以前に構成した次の SQL ステートメントがデータベースにヒットします。
SELECT cars.id, cars.name
FROM cars
WHERE 'Cars' = 'Cars'
UNION ALL
SELECT planes.id, planes.name
FROM planes
WHERE 'Planes' = 'Cars'
(私のアプリケーションのクエリは多くの JOINS などではるかに複雑であるため、これは非常に構成された例です...)
2 番目の部分を SQL Server Management Studio に貼り付け、いくつかのパラメーターを設定して [実行] をクリックしても、クエリが完了するまでに数秒かかり、結果は空になります。
私の質問は次のとおりです。SQL Server が 2 番目の SELECT ステートメントで実際に何もする必要がないことを認識できるように、2 番目の部分を最適化するにはどうすればよいですか?
編集:
2 番目の (「デッド」) クエリがしばらくの間実行される理由は次のとおりです。クエリの内部には、WHERE 句のサブ SELECT と共に JOINS があります。まあ言ってみれば
SELECT planes.id, planes.name
FROM planes
INNER JOIN very_complex_colour_view colours
ON colours.id = planes.colour.id
WHERE 'Planes' = 'Cars'
実際、「planes」テーブルでさえ、それ自体が複雑なビューです。