実行プランを最初に見ると、式1/0
がCompute Scalar演算子で定義されていることがわかります。

さて、実行計画を繰り返し呼び出して、左端の実行を開始しないにもかかわらず、Open
およびGetRow
子イテレータのメソッドが結果を返すために、SQL Server 2005およびそれ以降の表現がしばしばだけされていることにより、最適化を含んで定義されて、計算スカラでは、後続まで延期評価操作には結果が必要です。
![SET STATISTICS XMLによって生成されたショープランに表示される計算スカラー演算子には、RunTimeInformation要素が含まれていない場合があります。 グラフィカルなショープランでは、SQL Server Management Studioで[実際の実行プランを含める]オプションが選択されている場合、[プロパティ]ウィンドウに[実際の行]、[実際の再バインド]、および[実際の巻き戻し]が表示されないことがあります。 これが発生した場合、これらの演算子はコンパイルされたクエリプランで使用されましたが、実行時クエリプランの他のオペレータによって実行されたことを意味します。 また、SET STATISTICS PROFILEによって生成されたShowplan出力の実行回数は、SET STATISTICS XMLによって生成されたShowplansの再バインドと巻き戻しの合計に等しいことに注意してください。 From:MSDN Books Online](https://i.stack.imgur.com/7BoZq.png)
この場合、式の結果は、クライアントに戻るために行を組み立てるときにのみ必要です(緑色のSELECT
アイコンで発生すると考えることができます)。そのロジックにより、遅延評価は、どちらのプランも戻り行を生成しないため、式が評価されないことを意味します。ポイントを少し労力をかけるために、クラスター化インデックスシークもテーブルスキャンも行を返さないため、クライアントに返すためにアセンブルする行はありません。
ただし、一部の式はランタイム定数として識別され、クエリの実行が開始される前に1回評価されるため、個別の最適化があります。この場合、これが発生したことはshowplan XML(左側のクラスター化インデックスシークプラン、右側のテーブルスキャンプラン)で確認できます。

このブログ投稿では、基礎となるメカニズムと、それらがパフォーマンスにどのように影響するかについて詳しく説明しました。そこで提供される情報を使用して、最初のクエリを変更して、実行が開始される前に両方の式が評価およびキャッシュされるようにすることができます。
select 1/0 * CONVERT(integer, @@DBTS)
from #temp
where id = 1
select 1/0
from #temp2
where id = 1
現在、最初のプランには定数式参照も含まれており、両方のクエリでエラーメッセージが生成されます。最初のクエリのXMLには次が含まれます。

詳細:スカラー、式、およびパフォーマンスの計算