論理操作および物理操作のプラン表示演算子のリファレンス

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric の SQL データベース

演算子は、SQL Server データベース エンジンがクエリを実行する方法を記述します。 クエリ オプティマイザーでは、演算子を使用してクエリ プランを作成し、結果を作成するか、クエリで指定された操作を実行します。 クエリ プランは、物理操作をツリー構成で表現したものです。 左端の演算子はルートであり、全体的な実行を促進します。 SELECT ステートメントの場合、ルートは通常、クライアントに結果セットを返します。 データ変更ステートメント (INSERTUPDATEDELETEMERGE) や SELECT...INTOなどのステートメントの場合、ルートは変更を実行し、行を返さない可能性があります。 ツリーの右端に入力がない演算子は、通常、ストレージからデータを読み取るリーフ ノードです。 中間演算子は、プランを右から左に流れるデータを変換、フィルター処理、結合します。

クエリ プランを表示するには、SET SHOWPLAN ステートメント、SQL Server Management Studio のグラフィカル実行プラン オプション、および拡張イベントのショープラン イベントを使用します。

演算子の型

操作は、論理操作と物理操作に分類されます。

論理演算子

論理演算子は、クエリの処理に使用される関係代数演算を記述します。 つまり、論理操作は、どのような操作を実行する必要があるかを、概念的に示します。

物理操作

物理操作では、論理操作によって示される操作が実装されます。 それぞれの物理操作は、操作を実行するオブジェクトまたはルーチンです。 たとえば、一部の物理操作は、テーブル、インデックス、またはビューから、列や行にアクセスします。 物理操作は、計算、集計、データ整合性チェック、結合などの他の操作を実行します。 物理操作には、それぞれ関連するコストがかかります。

物理操作では、初期化、データの収集が行われた後に終了されます。 具体的には、物理操作は次の 3 つのメソッド呼び出しに応答できます。

  • Open(): Open() メソッドは、物理操作自体を初期化し、必要なデータ構造を設定します。 物理操作は多数の Open() 呼び出しを受け取る場合がありますが、通常は 1 つのみ受け取ります。

  • GetRow(): GetRow() メソッドにより、物理操作がデータの最初の行または後続の行を取得します。 物理オペレーターが受け取るGetRow()の呼び出しは、ゼロであることも多数であることもあります。

  • Close(): Close() メソッドは、物理演算子にクリーンアップ操作を実行させ、シャットダウンする原因となります。 物理操作は 1 つの Close() 呼び出しのみを受け取りますが、Close() 呼び出しは常に保証されるとは限りません。

GetRow() メソッドは 1 行のデータを返し、呼び出された回数は、グラフィカルおよび XML プラン表示によって生成されるプラン表示出力に ActualRows として表示されます。 これらの SET オプションの詳細については、 SET STATISTICS PROFILE および SET STATISTICS XML を参照してください。

言語要素

クエリ プランの一部の演算子は、リレーショナル操作ではなく、Transact-SQL < c0>language 要素を表します。 これには、変数の代入、型変換、制御フロー (IF/WHILE) などのコンストラクトが含まれます。 言語要素は、論理演算子または物理演算子として分類されません。

再バインド、巻き戻し、スキャンの終了

showplan 出力には次のカウンターが表示され、オペレーターの実行頻度を把握するのに役立ちます。

プラン表示出力に表示される ActualRebinds および ActualRewinds の数は、Open() メソッドが呼び出された回数を示します。 ネステッド ループ結合内部での操作でなければ、ActualRebinds は 1、ActualRewinds は 0 になります。 ループ結合内部での操作の場合、再バインドと巻き戻しの合計数は、結合外部で処理された行数に等しくなる必要があります。 再バインドとは、結合の変更された相関パラメーターと、内側部分の相関パラメーターの 1 つ以上を再評価する必要があることを意味します。 巻き戻しとは、変更された相関パラメーターを使用せず、前の内部の結果セットを再利用することを意味します。

ActualRebindsActualRewinds は、SET STATISTICS XML ON およびグラフィカルなプラン表示を使用して生成された XML プラン表示出力に存在します。 これらは、インデックス スプールリモート クエリ行数スプール並べ替えテーブル スプールテーブル値関数などの演算子に設定されます。 StartupExpression 属性がに設定されている場合、AssertFilter などの演算子に対して ActualRebindsTRUE が設定される場合もあります。

ActualRebinds および ActualRewinds が XML プラン表示に存在する場合、これらの値が EstimateRebinds および EstimateRewindsに相当します。 存在しない場合、予測行数 (EstimateRows) が実際の行数 (ActualRows) に相当します。 実際のグラフィカルなプラン表示出力では、実際の再バインドと実際の巻き戻しが存在しない場合は、ゼロが表示されます。

関連するカウンターの ActualEndOfScans は、XML およびグラフィカルなプラン表示で使用できます。 物理操作がデータ ストリームの最後に達するたびに、このカウンターは 1 ずつ増加します。 物理操作がデータ ストリームの最後に達することのできる回数は、0 回、1 回、あるいは複数回です。 再バインドおよび巻き戻しと同様に、スキャンの終了回数が2回以上になることがありますが、それはループ結合の内側でオペレーションが行われている場合に限ります。 スキャン回数の終了は、再バインドおよび巻き戻しの合計数以下になる必要があります。

クエリ オプティマイザーが論理演算子と物理演算子をマップする方法

クエリ オプティマイザーでは、ツリー構成の論理操作としてクエリ プランが作成されます。 クエリ オプティマイザーは、プランを作成した後、論理演算子ごとに物理操作を選択します。 クエリ オプティマイザーでは、 コストベースのアプローチ を使用して、論理演算子を実装する物理操作を決定します。

通常、複数の物理操作で 1 つの論理操作を実装できます。 ただし、めったにないケースですが、1 つの物理操作で複数の論理操作を実装することもできます。

バッチ モード実行

バッチ モード実行は、一度に 1 行ずつではなく、複数の行をまとめて処理するためのクエリ処理方法です (そのため、バッチという言葉が使われています)。 バッチ モード処理では、マルチコア CPU 向けに最適化されており、最新ハードウェアでメモリ スループットを上げるアルゴリズムが使用されています。 バッチ モードは、行ストア オブジェクトと列ストア オブジェクトの両方の操作セットで使用できます。 詳細については、「クエリ処理アーキテクチャ ガイド」を参照してください。

実行プランを読み取る方法

グラフィカル実行プランでは、矢印は右から左を指し、データ フローを表します。 実行時に、これは逆の方向で機能します。演算子はプルベースであり、データを求められたときにのみ機能します。

ルート演算子は子に対してGetRow()を呼び出し、その子もまた自分の子を順に呼び出します。リーフ ノードがストレージから行を読み取り、それを順にチェーン上に返します。 たとえば、Top 演算子の下のクラスター化インデックス スキャンでは、テーブル全体はスキャンされません。 Top に十分な行が含まれるとすぐにスキャンが停止します。 バッチ モードでは、各呼び出しは 1 行ではなく行のバッチを返します。 どちらの読み取り方向も役立ちます。右から左に各オペレーターに入力するデータを示し、左から右に、作業を推進するオペレーターを示します。

操作の説明

このセクションには、論理演算子と物理演算子の説明が含まれています。 SQL Server Management Studio (SSMS) のクエリ プラン ビューの [プロパティ] ペインを使用して、クエリ プランと演算子のプロパティを表示できます。

ヒント

特定のグラフィカル実行プラン アイコンに、右から左に 2 つの矢印が付いた黄色の円がある場合は常に、演算子が並列に実行されたことを意味します。 並列処理の詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」を参照してください。

アイコン ショープラン オペレーター 説明
適応型結合 適応型結合演算子を使うと、ハッシュ結合方法または入れ子になったループ結合方法のどちらを選ぶかを、最初の入力のスキャンが終わるまで遅らせることができます。

Adaptive Join は、物理操作です。 詳細については、「アダプティブ結合について」を参照してください。
集計 Aggregate 演算子は、1 つ以上の集計関数を含む式を計算します。

集計 は論理演算子です。 これは、 Stream AggregateHash MatchWindow Aggregate、または UserDefinedAggregate (CLR) 演算子によって実装できます。
算術式 Arithmetic Expression 操作は、行の既存の値から新しい値を計算します。 算術式 は、新しいバージョンの SQL Server では使用されません。
Assert Assert 操作は、状態の検証を行います。 たとえば、参照整合性の検証や、スカラー サブクエリによって 1 行返されることの確認を行います。 入力行ごとに、Assert 操作によって実行プランの [Properties] ウィンドウの式が評価されます。 この式が NULL であると評価されると、行は Assert 操作を通過して、クエリの実行が継続されます。 式が NULL 以外の値に評価されると、相応のエラーが発生します。

Assert は物理操作です。
割り当て Assign 操作は、変数に式の値または定数値を代入します。

Assign は言語要素です。
なし Async Concat Async Concat 操作は、リモート クエリ (分散クエリ) でのみ使用されます。 n 個の子ノードと 1 個の親ノードがあります。 通常、子ノードのいくつかはリモートコンピュータで、分散クエリに参加しています。 Async Concat は、すべての子ノードに同時に Open() 呼び出しを行い、各子ノードにビットマップを適用します。 1Async Concat に設定されている各ビットについて、要求に応じて出力行が親ノードに送信されます。

Async Concat は物理操作です。
バッチ ハッシュ テーブルのビルド Batch Hash Table Build 演算子は、メモリ最適化列ストア インデックスのバッチ ハッシュ テーブルを構築します。

適用対象: SQL Server 2012 (11.x) のみ。
Bitmap SQL Server では、Bitmap 操作で、並列クエリ プランにビットマップ フィルターを実装しています。 ビットマップ フィルターを使用すると、 Parallelism 演算子などの別の演算子を介して行を渡す前に、結合レコードを生成できないキー値を持つ行を削除することで、クエリ処理が高速化されます。 ビットマップ フィルターは、操作ツリーの特定の部分にあるテーブルから得られた一連の値の圧縮表現を使用して、同じツリーの別の部分にある 2 つ目のテーブルから行を抽出します。 不要な行をクエリの初期段階で排除することにより、それ以降の操作に渡される行数が減り、その結果、クエリの全体的なパフォーマンスが向上します。 オプティマイザーは、どのような場合にビットマップの選択度が効果を期待できる程度に高くなるか、また、どのような操作にフィルターを適用すべきかを判断します。

Bitmap は物理操作です。
ビットマップ作成 Bitmap Create 操作は、ビットマップが作成されるプラン表示の出力に使用されます。

Bitmap Create は論理操作です。
なし Branch Repartition 並列クエリ プランでは、反復子に概念上の領域が存在する場合があります。 このような領域内のすべての反復子は、並列スレッドで実行できます。 リージョン自体は、順次実行する必要があります。 個別の領域内の Parallelism 反復子のいくつかは、 Branch Repartitionと呼ばれます。 このような 2 つの領域間の境界にある Parallelism 反復子は、 Segment Repartitionと呼ばれます。

Branch RepartitionSegment Repartition は論理操作です。
Broadcast Broadcast には、1 つの子ノードと n 個の親ノードがあります。 Broadcast では、要求時に複数のコンシューマーに入力行が送信されます。 各コンシューマーがすべての行を取得します。 たとえば、すべてのコンシューマーがハッシュ結合の構築側である場合、ハッシュ テーブルの n 個のコピーがビルドされます。

ブロードキャスト は論理演算子です。
クラスター化インデックスの削除 Clustered Index Delete 操作は、グラフィカルおよび XML プラン表示の [Properties] ウィンドウに表示されている [Object] プロパティで指定されたクラスター化インデックスから行を削除します。 SeekPredicate または Predicate が存在する場合、述語を満たす行のみが削除されます。

メモ:Object プロパティには、オペレーターがクラスター化インデックスと同時に変更する追加の非クラスター化インデックスが一覧表示される場合があります。

Clustered Index Delete は物理操作です。
クラスター化インデックスの挿入 Clustered Index Insert 操作は、グラフィカルおよび XML プラン表示の [Properties] ペインに表示される [Object] プロパティで指定されたクラスター化インデックスに、入力から行を挿入します。 XML プラン表示には、[SetPredicate] プロパティと [ColumnReference] プロパティが含まれており、このプロパティを使用して、各列が設定される値を決定できます。 Clustered Index Insert に挿入値の子がない場合、挿入される行は挿入操作自体から取得されます。

メモ:Object プロパティには、オペレーターがクラスター化インデックスと同時に変更する追加の非クラスター化インデックスが一覧表示される場合があります。

Clustered Index Insert は物理操作です。
クラスター化インデックスのマージ Clustered Index Merge 操作は、マージ データ ストリームをクラスター化インデックスに適用します。 操作は、Properties ウインドウに一覧表示されている Object プロパティで指定されたクラスター化インデックスから行を削除、更新、または挿入します。 実際に実行される操作は、[ActionColumn] プロパティのランタイム値によって異なります。

メモ:Object プロパティには、オペレーターがクラスター化インデックスと同時に変更する追加の非クラスター化インデックスが一覧表示される場合があります。

Clustered Index Merge は物理操作です。
クラスター化インデックス スキャン Clustered Index Scan オペレーターは、XML プラン表示やグラフィカルプラン表示の [Properties] ウィンドウ内にリストされている[Object] プロパティに指定されたクラスター化インデックスをスキャンします。 オプションの [Predicate] がある場合、この述語に適合する行だけが返されます。 [Properties] ウィンドウまたは XML プラン表示の [Ordered] プロパティが True の場合、クエリ プロセッサは、クラスター化インデックスが並べ替えた順序で行を返す必要があると判断されます。 Ordered プロパティが False の場合、データベース エンジンは出力の順序を保証せずにインデックスをスキャンします。 SeekPredicate プロパティは、パーティション分割されたクラスター化インデックスでのみ使用できます。

Clustered Index Scan は論理操作でもあり、物理操作でもあります。
クラスター化インデックスシーク Clustered Index Seek 操作は、インデックスのシーク機能を使用してクラスター化インデックスから行を取得します。 グラフィカルおよび XML プラン表示の [Properties] ウインドウに表示される [Object] プロパティには、使用されているクラスター化インデックスの名前が含まれます。 SeekPredicate には、シークの述語が含まれています。 データベース エンジンはインデックスを使用して、 SeekPredicate 述語に適合する行だけを処理します。 また、データベース エンジンが SeekPredicate を満たすすべての行に対して評価する [Predicate] プロパティを含めることもできますが、これはオプションであり、このプロセスを完了するためにインデックスを使用しません。 通常、この演算子のOrderedプロパティはTrueです。

Clustered Index Seek は論理操作でもあり、物理操作でもあります。
クラスター化インデックスの更新 Clustered Index Update 操作は、グラフィカルおよび XML プラン表示の [Properties] ペインに表示される [Object] プロパティで指定されたクラスター化インデックスに、入力から行を更新します。 [Predicate] プロパティが存在する場合、この述語を満たす行のみが更新されます。 [SetPredicate] プロパティがある場合、更新される各列がこの値に設定されます。 [DefineValue] プロパティがある場合、この操作によって定義される値が一覧表示されます。 これらの値は、SET 句、またはこの操作内かこのクエリ内で参照されることがあります。

メモ:Object プロパティには、オペレーターがクラスター化インデックスと同時に変更する追加の非クラスター化インデックスが一覧表示される場合があります。

Clustered Index Update は論理操作でもあり、物理操作でもあります。
[折りたたみ] Collapse 操作により、更新処理が最適化されます。 更新が実行されると、( Split 操作を使用して) 削除と挿入に分割されます。 [Properties] ウインドウには、キー列の一覧を指定するグループ化述語が含まれています。 クエリ プロセッサでは、同じキー値を削除して挿入する操作が隣接する行で検出されると、これらの個別の操作を 1 つのより効率的な更新操作に置き換えます。

Collapse は論理操作でもあり、物理操作でもあります。
列ストア インデックスの削除 Columnstore Index Delete 操作は、グラフィカルおよび XML プラン表示の [Properties] ウインドウペインに表示される [Object] プロパティで指定された列ストア インデックスへの入力からの行の削除を表します。 削除は、クラスター化列ストア インデックスの Clustered Index Delete と、非クラスター化列ストア インデックスの Index Delete 操作を使用して行われます。 インデックスの種類 (ClusteredNonClusteredViewClustered、または ViewNonClustered) は、XML プランの IndexKind プロパティで指定されます。 SeekPredicate は、列ストア インデックスの削除には対応していません。 削除する行は、子演算子から読み取られます。

Columnstore Index Delete は物理操作です。
列ストア インデックスの挿入 Columnstore Index Insert 操作は、グラフィカルおよび XML プラン表示の [Properties] ウインドウペインに表示される Object プロパティで指定された列ストア インデックスへの入力からの行の挿入を表します。 挿入は、Clustered Index Insert の場合はクラスター化インデックス挿入操作を介して行われ、非クラスター化列ストア インデックスの場合はIndex Insert 操作を介して行われます。 インデックスの種類 (ClusteredNonClusteredViewClustered、または ViewNonClustered) は、XML プランの IndexKind プロパティで指定されます。 XML プラン表示には、[SetPredicate] プロパティと [ColumnReference] プロパティが含まれており、このプロパティを使用して、各列が設定される値を決定できます。

Columnstore Index Insert は物理操作です。
列ストア インデックスのマージ Columnstore Index Merge は、Clustered Index Merge 操作を使用したマージ データ ストリームのアプリケーションを表しています。 操作は、グラフィカルおよび XML プラン表示の [Properties] ウインドウにリストされている、[Object] プロパティで指定されたクラスター化列ストア インデックスから行を削除、更新、または挿入します。 インデックスの種類 (ClusteredNonClusteredViewClustered、または ViewNonClustered) は、XML プランの IndexKind プロパティで指定されます。 実際に実行される操作は、[ActionColumn] プロパティのランタイム値によって異なります。

Columnstore Index Merge は物理操作です。
Columnstore インデックス スキャン Columnstore Index Scan 演算子は、Object プロパティで指定された列ストア インデックスをスキャンし、グラフィカルおよび XML 表示プランの Properties ウインドウにリストされます。 スキャンは、クラスター化列ストア インデックスの Clustered Index Scan と、非クラスター化列ストア インデックスの Index Scan 操作を使用して実行されます。 インデックスの種類 (ClusteredNonClusteredViewClustered、または ViewNonClustered) は、XML プランの IndexKind プロパティで指定されます。 オプションの [Predicate] がある場合、この述語に適合する行だけが返されます。 [SeekPredicate] プロパティは、パーティション分割された列ストア インデックスに対してのみ使用でき、等しい条件または等しくない条件でのみ使用できます。 パーティション分割列がクエリ述語内にある場合、パーティションの削除と行グループの削除の両方で、スキャンする行グループの数を減らすことができます。

Columnstore Index Scan は物理操作です。
列ストア インデックスの更新 Columnstore Index Update 操作は、[Object] プロパティで指定された列ストア インデックス内の 1 つ以上の行の更新を表し、グラフィカルおよび XML 表示プランの [Properties] ウィンドウにリストされます。 更新は、Clustered Index Update 操作の場合はクラスター化インデックス更新操作を介して、非クラスター化列ストア インデックスの場合は Index Update 操作を介して行われます。 インデックスの種類 (ClusteredNonClusteredViewClustered、または ViewNonClustered) は、XML プランの IndexKind プロパティで指定されます。 SeekPredicate列ストア インデックスの更新ではサポートされていません。 更新する行は、子演算子から読み取られ更新されます。 [SetPredicate] プロパティがある場合、更新される各列がこの値に設定されます。 [DefineValue] プロパティがある場合、この操作によって定義される値が一覧表示されます。 これらの値は、SET 句、またはこの操作内かこのクエリ内で参照されることがあります。

Columnstore Index Update は物理操作です。
Compute Scalar Compute Scalar 操作は、計算されたスカラー値を作成する式を評価します。 この値は、ユーザー、クエリの参照先、またはその両方に返されることがあります。 フィルター述語や結合述語の例を挙げると、両方に含まれるものがあります。

Compute Scalar 演算子はSET STATISTICS XML によって生成されたプラン表示に出現しますが、RunTimeInformation 要素が含まれない場合があります。 SQL Server Management Studio の グラフィカル プラン表示で [実際の実行プランを含める] オプションが選択されているときは、グラフィカル プラン表示の [プロパティ] ウィンドウに [実際の行数][実際の再バインド数][実際の巻き戻し数] が表示されないことがあります。 その場合、コンパイルされたクエリ プランでは Compute Scalar 操作が使用されていたのに、実行時のクエリ プランではこの操作の作業が別の操作によって行われたことを意味します。 SET STATISTICS PROFILE によって生成されたプラン表示出力の実行数は、SET STATISTICS XML によって生成されたプラン表示の再バインドと巻き戻しの合計に相当します。

Compute Scalar は論理操作および物理操作です。
Concatenation Concatenation 操作は複数の入力をスキャンし、スキャンした各行を返します。 Concatenation は、主に Transact-SQL の UNION ALL コンストラクトの実装に使用します。 Concatenation 物理操作は入力が複数で出力が 1 つです。 この連結操作では、最初の入力ストリームの行が出力ストリームにコピーされ、続いて同じ操作が追加の各入力ストリームに対して繰り返されます。

Concatenation は論理操作でもあり、物理操作でもあります。
条件付き (IfWhile) Conditional 操作では、IF または WHILE ループに基づく条件処理を実行します。 If および While は言語要素です。
定数スキャン Constant Scan 操作は、1 つ以上の定数行をクエリに導入します。 多くの場合、 Compute Scalar 操作は、 Constant Scan 操作によって生成された行に列を追加するために、 Constant Scan の後で使用されます。 定数スキャン では、0 個以上の列を持つ 1 つ以上の行を生成できます。

定数スキャン は物理操作です。
CONVERT Convert 操作は、スカラー データ型間の変換を行います。

Convert は言語要素です。
クロス結合 Cross Join 操作は、最初 (上部) の入力の各行と 2 番目 (下部) の入力の各行を結合します。

Cross Join は論理操作です。
カーソル カーソル 論理操作および物理操作は、カーソル操作に関するクエリまたは更新処理がどのように実行されたかを示すために使用されます。 カーソル物理操作は、キーセット ドリブン カーソルの使用など、カーソルの処理に使用される物理的な実装アルゴリズムを示します。 カーソルを実行する各ステップには、物理操作が含まれます。 カーソル論理操作は、カーソルが読み取り専用であるなどの、カーソルのプロパティを示します。

論理操作には、AsynchronousOptimisticPrimaryRead OnlyScroll LocksSecondary、および Synchronous があります。

物理操作には、DynamicFetch QueryKeysetPopulation QueryRefresh Query、および Snapshot があります。
Declare Declare 操作はクエリ プランにローカル変数を割り当てます。

Declare は言語要素です。
削除 Delete 操作は、[Properties] ウインドウのオプションの述語を満たす行を (オブジェクトから) 削除します。

Delete は論理演算子です。
削除されたスキャン トリガーでは、Deleted Scan 操作が削除されたテーブルをスキャンします。

削除済みスキャン は、論理操作と物理操作です。
なし ユニーク Distinct 操作は、行セットや値のコレクションから重複部分を削除します。

Distinct は論理操作です。
なし 個別の並べ替え Distinct Sort 論理演算子は入力をスキャンし、重複を削除し、Properties ペインのdistinct order by 述語で指定された列で並べ替えます。

Distinct Sort は論理操作です。
ストリームの配布 Distribute Streams 操作は、並列クエリ プランのみで使用されます。 Distribute Streams 操作は、レコードの 1 つの入力ストリームを使用して複数の出力ストリームを生成します。 レコードの内容と形式は変更されません。 パーティション分割の種類が Broadcast でない限り、入力ストリームの各レコードは出力ストリームのいずれかに表示されます。この場合、各入力行はすべての出力ストリームに表示されます。 この操作では、出力ストリーム内で入力レコードの相対順序が自動的に保持されます。 通常、特定の入力レコードが属する出力ストリームを判断するにはハッシュ操作が使用されます。

出力をパーティション分割した後、[Properties] ウインドウに partition columns 述語とパーティション列が設定されます。

ストリームの分散 は論理演算子です。
動的 Dynamic 操作は、他のユーザーによる変更をすべて表示できるカーソルを使用します。

Dynamic は物理操作です。
即時スプール Eager Spool 操作は、入力全体を使用し、 tempdb データベースに格納されている一時隠しオブジェクトに各行を格納します。 この操作が再度使用され ( Nested Loops 操作で使用される場合など)、再バインドが不要な場合は、入力を再スキャンする代わりにスプールされたデータが使用されます。 再バインドが必要な場合は、スプールされたデータが破棄され、(再バインドされる) 入力の再スキャンによりスプール オブジェクトが再構築されます。 Eager Spool 演算子は、スプールファイルを「積極的」に構築します。スプールの親演算子が最初の行を要求すると、スプール演算子は入力演算子からすべての行を取り込み、それらをスプールに格納します。

Eager Spool は論理操作です。
クエリの取得 Fetch Query 操作は、カーソルに対してフェッチが実行されたときに行を取得します。

フェッチ クエリ は物理操作です。
フィルター Filter 操作は、入力をスキャンし、Properties 列にあるフィルター式 (述語) に適合する行だけを返します。
なし フローを区別する Flow Distinct 操作は入力をスキャンし、重複部分を削除します。 Distinct 操作はすべての入力を取得してから出力を行いますが、Flow Distinct 操作は入力から各行を取得するたびに行を返します。ただし、行が重複する場合は破棄されます。

Flow Distinct は論理操作です。
外部キー参照チェック Foreign Key References Check 操作は、変更された行を参照テーブルの行と比較して、変更によって参照整合性が損なわれないことを確認することで、参照整合性チェックを適切に実行します。 Foreign Key References Check 操作は、同じプライマリ キーまたは一意のキーに 253 を超える外部キー参照が存在する場合に使用されます。

Foreign Key References Check は論理操作でもあり、物理操作でもあります。
完全外部結合 Full Outer Join 論理演算子は、最初 (上部) の入力と 2 番目 (下部) の入力で結合述語を満たす各行を結合し、それらの行をすべて返します。 また、以下の行も返します。

- 2 番目の入力に一致するものがない最初の入力。

- 最初の入力と一致しない 2 番目の入力。

一致する値がない入力は NULL 値として返されます。

Full Outer Join は論理操作です。
ストリームを集める Gather Streams 操作は、並列クエリ プランでのみ使用されます。 Gather Streams 操作は複数の入力ストリームを使用し、入力ストリームを組み合わせてレコードの単一出力ストリームを作成します。 レコードの内容と形式は変更されません。 この操作で順序を保持する場合は、すべての入力ストリームが並べ替えられている必要があります。 出力を並べ替える場合、[Properties] ウインドウには order by 述語および並べ替える列の名前が表示されます。

Gather Streams は論理操作です。
ハッシュ一致 Hash Match 操作は、ビルド入力の行ごとにハッシュ値を計算してハッシュ テーブルを作成します。 [Properties] ペインに、ハッシュ値の作成に使用される列のリストを持つ ハッシュ述語 が表示されます。 次に、該当するプローブ行ごとに同じハッシュ関数を使用してハッシュ値が計算され、ハッシュ テーブル内で一致検索が行われます。 残差述語が存在する場合 ([プロパティ] ウィンドウに [残差のビルド] または [プローブ残差] と表示されます)、行が一致と見なされるためには、その述語も満たす必要があります。 動作は、次に示すように、実行している論理操作によって異なります。

- すべての結合では、最初 (上部) の入力を使用してハッシュ テーブルを作成し、2 番目 (下部) の入力を使用してハッシュ テーブルを探索します。 出力は、結合の種類で指定されているとおりに一致します (または一致しません)。 複数の結合が同じ結合列を使用する場合、これらの操作はハッシュ チームにグループ化されます。

- Distinct 操作または Aggregate 操作の場合、入力を使用してハッシュ テーブルを作成します (重複部分を削除し、集計式を計算します)。 ハッシュ テーブルを作成したら、テーブルをスキャンしすべてのエントリを出力します。

- Union 操作の場合、最初の入力を使用してハッシュ テーブルを作成します (重複部分は削除します)。 2 番目の入力 (重複部分はありません) を使用して、ハッシュ テーブルを探索して一致しないすべての行を返します。次に、ハッシュ テーブルをスキャンし、すべてのエントリを返します。

Hash Match は物理操作です。 詳細については、「ハッシュ結合について」を参照してください。
インデックス削除 Index Delete 操作は、[Properties] ウインドウで指定された非クラスター化インデックスから行を削除します。

Index Delete は物理操作です。
インデックスの挿入 Index Insert 操作は、Properties ウィンドウに指定された非クラスター化インデックスに入力からの行を挿入します。 [プロパティ] ペインには、各列に設定される値を示す set 述語も含まれています。

Index Insert は物理操作です。
インデックス スキャン Index Scan 操作は、[Properties] ウィンドウに指定された非クラスター化インデックスからすべての行を取得します。 [Properties] ウインドウにオプションの where 述語がある場合、述語に適合する行だけが返されます。 Ordered プロパティが True の場合、非クラスター化インデックスが並べ替えられた順序で行が返されます。 Ordered プロパティが False の場合、データベース エンジンは出力の順序を保証せずにインデックスをスキャンします。

Index Scan は論理操作でもあり、物理操作でもあります。
Index Seek Index Seek 操作は、インデックスのシーク機能を使用して非クラスター化インデックスから行を取得します。 [Properties] ウインドウには、使用される非クラスター化インデックスの名前が含まれます。 また、seek 述語も含まれます。 データベース エンジンはインデックスを使用して、seek 述語に適合する行だけを処理します。 必要に応じて、この列には where 述語が含まれることがあります。この述語は、ストレージ エンジンによって seek 述語に適合するすべての行に対して評価されます (この処理を行うのにインデックスは使用されません)。

Index Seek は論理操作でもあり、物理操作でもあります。
Index Spool Index Spool オペレーターには seek 述語がプロパティ ペインに含まれています。 Index Spool 演算子は、入力行をスキャンし、各行のコピーを非表示のスプール ファイル (tempdb データベースに格納され、クエリの有効期間中のみ既存) に配置し、行にインデックスを作成します。 さらに、インデックスのシーク機能を使用して、seek 述語に適合する行だけを出力します。

Index Spool は物理操作です。
インデックスの更新 Index Update 物理操作は、[Properties] ウインドウに指定された非クラスター化インデックスの入力に基づいて行を更新します。 set 述語がある場合、更新される各列がこの値に設定されます。

Index Update は物理操作です。
内部結合 Inner Join 論理操作は、最初 (上部) の入力と 2 番目 (下部) の入力の結合述語に適合する各行を返します。

Inner Join は論理操作です。
[挿入] Insert 操作は、[Properties] ウインドウに指定されたオブジェクトに入力から各行を挿入します。 物理操作は、 Table Insert操作、 Index Insert操作、または Clustered Index Insert 操作のいずれかです。

Insert は論理操作です。
挿入されたスキャン トリガーで Inserted Scan 操作は、 inserted テーブルをスキャンします。

Inserted Scan 操作は論理操作でもあり、物理操作でもあります。
Intrinsic Intrinsic 演算子では、内部の Transact-SQL 関数が呼び出されます。

Intrinsic は言語要素です。
Iterator Iterator の汎用アイコンは、グラフィカルなショープランを生成するロジックで、イテレーターに適したアイコンが見つからない場合に表示されます。 汎用アイコンは、必ずしもエラー状態を示しているわけではありません。
キー検索 Key Lookup 演算子は、クラスター化インデックスまたはクラスター化列ストア インデックスを持つテーブルのブックマーク参照です。 クラスター化インデックスの場合、[ プロパティ ] ペインには、クラスター化インデックスの名前と、行の検索に使用されるクラスタリング キーが含まれます。 クラスター化列ストア インデックスの場合、クラスター化キーの代わりに ColStoreLoc が提供されます。 Key Lookup は、常に Nested Loops 操作を伴います。 WITH PREFETCH プロパティ ペインに 句がある場合、クエリ プロセッサは、クラスター化インデックスのブックマークを参照する際の最適方法として、非同期プリフェッチ(先読み)が使用されます。

テーブル サイズに対して実行回数が多い キー検索 では、カバーインデックスを追加するとメリットが得られる場合があります。 通常、実行の数が少ない場合は、パフォーマンスの問題ではありません。
Keyset Keyset 操作では、カーソルを使用して更新内容を参照できます。ただし、他のユーザーが挿入した内容は参照できません。

キーセット は物理操作です。
Language 要素 Language Element 汎用アイコンは、グラフィカルなプラン表示を生成するロジックでイテレーターに適したアイコンが見つからない場合に表示されます。 汎用アイコンは、必ずしもエラー状態を示しているわけではありません。
遅延スプール Lazy Spool 論理操作では、 tempdb データベースに格納された非表示の一時オブジェクトに入力からの各行を格納します。 この操作が再度使用され ( Nested Loops 操作で使用される場合など)、再バインドが不要な場合は、入力を再スキャンする代わりにスプールされたデータが使用されます。 再バインドが必要な場合は、スプールされたデータが破棄され、(再バインドされる) 入力の再スキャンによりスプール オブジェクトが再構築されます。 Lazy Spool 操作のスプール ファイルは "レイジー" 手法で構築されます。つまり、1 回にすべての行を処理するのではなく、スプールの親操作から行が要求されるたびに入力操作から行を取得し、その行をスプールに格納します。

Lazy Spool は論理操作です。
なし 左反半結合 Left Anti Semi Join 操作は、最初 (上部) の入力の中に 2 番目 (下部) の入力に一致する行がない場合に該当する行を返します。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。

Left Anti Semi Join は論理操作です。
なし 左外部結合 Left Outer Join 操作は、最初 (上部) の入力と 2 番目 (下部) の入力の結合述語に適合する各行を返します。 また、2 番目入力で一致する列がない最初の入力列を返します。 2 番めの一致しない列が null 値として返されます。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。

Left Outer Join は論理操作です。
なし 左半結合 Left Semi Join 操作は、最初 (上部) の入力の中に 2 番目 (下部) の入力に一致する行がある場合に該当する行を返します。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。

Left Semi Join は論理操作です。
ログ行スキャン Log Row Scan 操作は、トランザクション ログをスキャンします。

Log Row Scan は論理操作でもあり、物理操作でもあります。
マージ間隔 Merge Interval 操作は、重複している可能性のある複数の間隔をマージして、重複しない最小限の間隔を作成します。この間隔は、インデックス エントリのシークに使用されます。 通常、この演算子は、一つまたは複数の Compute Scalar 演算子の前に位置し、Constant Scan 演算子の上にあり、これらの演算子は、この演算子がマージする区間(行内の列として表される)を構築します。

Merge Interval は論理操作でもあり、物理操作でもあります。
マージ結合 マージ結合演算子は、内部結合、左外部結合、左セミ結合、左アンチセミ結合、右外部結合、右セミ結合、右アンチセミ結合、完全外部結合、連結および結合論理演算を実行します。

[Properties] ウィンドウの Merge Join 操作には、この操作によって一対多の結合が実行されている場合は merge 述語が、多対多の結合が実行されている場合は many-to-many merge 述語が含まれています。 また、[Properties] ウインドウには、操作の実行に使用される列のコンマ区切りリストも設定されます。 Merge Join 操作には、それぞれの列を基準に並べ替えられた 2 つの入力が必要です。この並べ替えを行うときは、クエリ プランに明示的な並べ替え操作を挿入することが可能です。 明示的な並べ替えが必要でない場合、Merge Join 操作は特に効果的です。たとえば、データベースに適切な B ツリー インデックスがある場合、またはマージ結合とロール アップを含むグループ化など、複数の操作で並べ替え順序を利用できる場合などです。

Merge Join は物理操作です。 詳細については、「マージ結合について」を参照してください。
入れ子になったループ Nested Loops 操作は、内部結合、左外部結合、左半結合、左反半結合の各論理操作を実行します。

入れ子になったループ結合では、外側 (上部) 入力の各行に対して内部 (下部) 入力が 1 回実行されます。 Outer References プロパティが存在する場合、結合は動的です。外側の行からリストされた列の値が内部入力にプッシュされるため、演算子は一致する行のみを返します。 この場合、 Predicate プロパティは使用されません。 外部参照が存在しない場合、結合は静的です。内部入力は各実行で同じ行を返し、[プロパティ] ペインの述語によって一致として修飾される組み合わせが決定されます。

OPTIMIZED属性が True に設定されている場合、オペレーターは外側の入力を並べ替えて、内部入力にアクセスするときの I/O の局所性を向上させます。 これは、最適化されたネストしたループ結合と呼ばれることもあります。

Nested Loops は物理操作です。 詳細については、「入れ子になっているループ結合について」を参照してください。
なし オンライン インデックスの挿入 Online Index Insert 操作は、インデックスの操作 (作成、変更 および削除) がオンラインで実行されることを示します。 つまり、インデックス操作の実行中に、基になるテーブル データをユーザーが利用することができます。

Online Index Insert は物理操作です。
なし 並列処理 Parallelism 操作 (または交換反復子) は、Distribute Streams、Gather Streams、および Repartition Streams の各論理操作を実行します。 [Properties] ペインには、パーティションされる列のコンマ区切りリストを指定した パーティション列 述語を含めることが可能です。 [Properties] ペインには、パーティション分割中に並べ替え順序を保持する列のリストを指定した order by 述語も含めることができます。

注: クエリが並列クエリとしてコンパイルされていても、実行時に直列クエリとして実行されると、SQL Server Management Studio の「実際の実行プランを含める」オプションを使用して生成されたプラン表示出力には、並列処理演算子のRunTimeInformation要素は含まれません。 SET STATISTICS PROFILE の出力では、Parallelism 操作に対する実際の行数および実際の実行回数としてゼロが表示されます。 いずれの状況が発生した場合も、 Parallelism 操作が実行時のクエリ プランではなく、クエリのコンパイル中にのみ使用されたことを示します。 サーバー上での同時実行の負荷が高い場合は、並列クエリ プランが直列に実行されることがあります。

Parallelism は物理操作です。 Parallelism 操作に関する詳細については、「並列処理操作」を参照してください。
パラメーター テーブル スキャン Parameter Table Scan 演算子は、INSERT ... EXEC ステートメント中に生成された内部行セットを読み取ります。 この行セットには、ストアド プロシージャや動的 SQL バッチなど、実行されるモジュールの出力が含まれます。これらの結果がテーブル、一時テーブル、またはテーブル変数に挿入される場合です。

Parameter Table Scan は論理操作でもあり、物理操作でもあります。
なし 部分集計 部分集計 は、通常、並列プランで使用されます。 ディスクへの書き込み ("スピル" と呼ばれます) が必要にならないように、できるだけ多くの入力行に集計関数が適用されます。 Hash Match は、パーティション集計を実装する唯一の物理操作 (反復子) です。

Partial Aggregate は論理操作です。
人口クエリ Population Query 操作によって、カーソルが開かれたときにカーソルの作業テーブルを作成します。

Population Query は物理演算子です。
入れる Put 演算子は、外部 (PolyBase) テーブルにデータを挿入します。 他の挿入演算子とは異なり、 Put は親演算子に行を返しません。 SQL Server 2016 (13.x) ~ SQL Server 2019 (15.x) では、Put 演算子は Hadoop を対象とし、行モードで実行します。 SQL Server 2022 (16.x) 以降のバージョンでは、Put 演算子はAzure Storageまたは S3 互換のストレージを対象とし、バッチ モードで実行します。 詳細については、 CREATE EXTERNAL TABLE AS SELECT (CETAS) を参照してください。

Put は物理操作です。

適用対象: SQL Server 2016 (13.x) 以降のバージョン。
クエリの更新 Refresh Query 操作は、フェッチ バッファーから行の現在のデータをフェッチします。

更新クエリ は物理操作です。
リモート削除 Remote Delete 操作は、リモート オブジェクトから入力行を削除します。

Remote Delete は論理操作でもあり、物理操作でもあります。
リモート インデックス スキャン Remote Index Scan 操作は、[Properties] ウインドウに指定されたリモート インデックスをスキャンします。

Remote Index Scan は論理操作でもあり、物理操作でもあります。
リモートインデックスシーク Remote Index Seek 操作は、リモート インデックス オブジェクトのシーク機能を使用して行を取得します。 [Properties] ウインドウには、使用されているリモート インデックスの名前と seek 述語が含まれます。

Remote Index Seek は論理操作であり、物理操作でもあります。
リモート挿入 Remote Insert 操作では、入力行がリモート オブジェクトに挿入されます。

Remote Insert は論理操作でもあり、物理操作でもあります。
リモート クエリ Remote Query 操作では、リモート ソースにクエリを送信します。 リモート サーバーに送信されるクエリのテキストは [Properties] ウインドウにあります。

Remote Query は論理操作でもあり、物理操作でもあります。
リモート スキャン Remote Scan 操作は、リモート オブジェクトをスキャンします。 リモート オブジェクトの名前が [Properties] ウィンドウに表示されます。

Remote Scan は論理操作でもあり、物理操作でもあります。
リモート更新 Remote Update 操作は、リモート オブジェクトの入力行を更新します。

Remote Update は論理操作でもあり、物理操作でもあります。
ストリームの再パーティション Repartition Streams 操作 (または交換反復子) では、複数のストリームを使用して、複数のレコード ストリームが生成されます。 レコードの内容と形式は変更されません。 クエリ オプティマイザーでビットマップ フィルターを使用する場合、出力ストリーム内の行数が減ります。 入力ストリームの各レコードは、1 つの出力ストリームに配置されます。 この操作で順序を保持する場合、すべての入力ストリームが並べ替えられ、いくつかの並べ替え済みの出力ストリームにマージされる必要があります。 出力をパーティション分割する場合、[Properties] ウインドウに partition columns 述語とパーティション列が設定されます。 出力が並べ替えられる場合、[Properties] ウィンドウには order by 述語と並べ替え対象の列が含まれます。 この操作は、並列クエリ プランのみで使用されます。

Repartition Streams は論理操作です。
結果 Result 操作は、クエリ プランの最後に返されるデータです。 これは通常、ショープランのルート要素です。

Result は言語要素です。
RID 参照 RID Lookup は、指定された行識別子 (RID) を使用する、ヒープ上のブックマーク参照です。 [Properties] ウィンドウには、テーブル内の行を検索するために使用されるブックマーク ラベルや、行が検索されるテーブルの名前が含まれます。 RID 参照 には、常に ネストループ演算子 が伴います。

RID Lookup は物理操作です。 ブックマーク参照の詳細については、「コミット済みの読み取りとブックマークの参照」を参照してください。
なし 右反半結合 Right Anti Semi Join 演算子は、最初 (上部) の入力に一致する行が存在しない場合に、2 番目 (下部) の入力の各行を出力します。 一致行は、[Properties] ウィンドウの述語に適合する行として定義されます。述語がない場合は、各行が一致行になります。

Right Anti Semi Join は論理操作です。
なし 右外部結合 Right Outer Join 操作は、2 番目 (下部) の入力と最初 (上部) の入力の一致行との結合に適合する各行を返します。 また、2 番目の入力に最初の入力に一致する行がない場合は、2 番目の入力が NULL と結合された行も返します。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。

Right Outer Join は論理操作です。
なし 右セミ結合 Right Semi Join 操作は、2 番目 (下部) の入力の中に最初 (上部) の入力と一致する行があれば、該当する行を返します。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。

Right Semi Join は論理操作です。
行数スプール Row Count Spool 操作では入力がスキャンされて存在する行数がカウントされ、同数の行がデータなしで返されます。 この操作は、行に含まれているデータではなく、行の存在チェックが重要な場合に使用されます。 たとえば、Nested Loops 操作で左半結合操作が実行され、結合述語が内部入力に適用される場合、Nested Loops 操作の内部入力の上に Row Count Spool が配置されることがあります。 その後、Nested Loops 操作では、Row Count Spool 操作から出力される行数が特定され (内部からの実際のデータは必要ないため)、外部行を返すかどうかが判断されます。

Row Count Spool は物理操作です。
なし セグメントの再分割 並列クエリ プランでは、反復子に概念上の領域が存在する場合があります。 このような領域内のすべての反復子は、並列スレッドで実行できます。 リージョン自体は、順次実行する必要があります。 個別の領域内の Parallelism 反復子のいくつかは、 Branch Repartitionと呼ばれます。 このような 2 つの領域間の境界にある Parallelism 反復子は、 Segment Repartitionと呼ばれます。

Branch RepartitionSegment Repartition は論理操作です。
Segment Segment 操作は、1 つまたは複数の列の値に基づいて入力セットをセグメントに分割します。 これらの列は、 Segment 操作に引数として表示されます。 入力は、これらの列で並べ替えられます。 演算子は、セグメント列を使用して、各セグメントの最初の行をマークします。

Segment は論理操作であり、物理操作でもあります。
シーケンス プロジェクト Sequence Project 操作は、列を追加し、順序付けされたセットに対する計算を実行します。 1 つ以上の列の値に基づいて、入力セットをセグメントに分割する必要があります。

Sequence Project は論理操作でもあり、物理操作でもあります。
Sequence Sequence 演算子は、各入力を順番 (上から下) で実行し、最後の (下) 入力から取得した行のみを返します。 一般的な用途としては、ワイド更新プラン (通常、各入力は異なるオブジェクトの更新)、複数ステートメントのテーブル値関数を使用するクエリ、グラフ テーブルで SHORTEST_PATH を使用するクエリなどがあります。

Sequence は論理操作でもあり、物理操作でもあります。
スナップショット Snapshot 操作は、他のユーザーによる変更を表示しないカーソルを作成します。

スナップショット は物理操作です。
Sort Sort 操作は、すべての入力行を並べ替えます。 [Properties] ウィンドウには、この操作によって重複が削除される場合は distinct order by 述語が含まれ、それ以外の場合は order by 述語が含まれます。これらの述語では、並べ替える列の一覧がコンマで区切って指定されています。 列を昇順に並べ替える場合は、列名の前に値 ASC が付きます。降順に並べ替える場合は、列名の前に値 DESC が付きます。

Sort は論理操作でもあり、物理操作でもあります。
分割 Split 操作は、更新処理を最適化する場合に使用します。 この操作により、各更新操作が削除操作と挿入操作に分割されます。

Split 操作は論理操作でもあり、物理操作でもあります。
スプール Spool 操作は、クエリの途中結果を tempdb データベースに保存します。
ストリーム アグリゲート (Stream Aggregate) Stream Aggregate 操作は、1 つ以上の列を基準にして行をグループ化し、クエリから返される 1 つ以上の集計式を計算します。 Stream Aggregate 操作を使用するには、グループ内で列を基準にして入力を並べ替えておく必要があります。 オプティマイザーは、前の Sort 操作、順序付けられたインデックス シークまたはスキャンによってデータがまだ並べ替えられていない場合、この操作の前に Sort 操作を使用します。 SQL Server Management Studio の SHOWPLAN_ALL ステートメントまたはグラフィカルな実行プランで、group by 述語の列は [Properties] ウインドウ列に一覧表示され、集計式は Defined Values 列に一覧表示されます。

Stream Aggregate は物理操作です。
スイッチ Switch は、 n 個の入力を取得する特殊な連結反復子です。 個々の Switch 操作には式が 1 つ関連付けられます。 式の戻り値 (0 ~ n- 1) に応じて、 Switch は適切な入力を実行し、その行を返します。 Switch は、パーティション ビューに対して INSERT INTO ステートメントのクエリ プランを実装するために使用されます。 また、 TOP 演算子などの特定の演算子を使用して、高速前方カーソルを含むクエリ プランを実装するためにも使用されます。

Switch は論理操作であり、物理操作でもあります。
テーブルの削除 Table Delete 操作は、クエリ実行プランの [Properties] ウインドウで指定されているテーブルから行を削除します。

Table Delete は物理操作です。
テーブルの挿入 Table Insert 操作では、クエリ実行プランの Properties 列で指定したテーブルに、入力からの行が挿入されます。 [プロパティ] ペインには、各列に設定される値を示す set 述語も含まれています。 Table Insert に挿入値の子がない場合、挿入される行は、Insert 操作自体から取得されます。

Table Insert は物理操作です。
テーブルのマージ Table Merge 操作は、マージ データ ストリームをヒープに適用します。 この操作は、操作の [Properties] ウィンドウで指定されているテーブル内の行を削除、更新、または挿入します。 実際に実行される操作は、[ActionColumn] プロパティのランタイム値によって異なります

Table Merge は物理操作です。
テーブル スキャン Table Scan 操作は、クエリ実行プランの [Properties] ウィンドウで指定されているテーブルからすべての行を取得します。 [Properties] ウインドウで、where 述語がある場合、述語に適合する行だけが返されます。

Table Scan は論理操作でもあり、物理操作でもあります。
テーブル スプール Table Spool 操作は入力をスキャンし、隠しスプール テーブルに各行のコピーを格納します。この隠しスプール テーブルは tempdb データベースに格納され、クエリの有効期間だけ存在します。 この操作が再度使用され ( Nested Loops 操作で使用される場合など)、再バインドが不要な場合は、入力を再スキャンする代わりにスプールされたデータが使用されます。

Table Spool は物理操作です。
テーブルの更新 Table Update 操作は、クエリ実行プランの [Properties] ウインドウで指定されているテーブルの入力行を更新します。 set 述語によって、更新された各列の値が決定されます。 これらの値は、SET 句、またはこの操作内かこのクエリ内で参照されることがあります。

Table Update は物理操作です。
テーブル値関数 テーブル値関数演算子はテーブル値関数 (Transact-SQL または CLR) を評価し、結果の行を tempdb データベースに格納します。 親のイテレータが行を要求すると、テーブル値関数tempdbから行を返します。

テーブル値関数への呼び出しを伴うクエリにより、 Table-valued Function 反復子を備えたクエリ プランが生成されます。 さまざまなパラメーター値を使用してTable-valued Function を評価できます。

- Table-valued Function XML Reader では、パラメーターとして XML BLOB が入力され、XML ノードを表す行セットが XML ドキュメントの順序で生成されます。 他の入力パラメーターにより、XML ドキュメントのサブセットに返される XML ノードが制限されることがあります。

- Table Valued Function XML Reader with XPath filter は、出力を XPath 式が満たされる XML ノードに限定する、特殊な種類の XML Reader Table-valued Function です。

Table-valued Function は論理操作でもあり、物理操作でもあります。
トップ Top オペレーターは、入力をスキャンし、並べ替えの順序に基づいて、指定された最初の数または最初のパーセントの行だけを返します。 [Properties] ペインには、同順位をチェックする列のリストが含まれることもあります。 Top 操作は、更新プランで行数制限を行うときに使用します。

Top は論理操作でもあり、物理操作でもあります。
なし 上位 N 個の並べ替え Top N Sort は、結果セット全体ではなく最初の N 行のみを必要とする点を除いては、 Sort 反復子と類似しています。 N の値が小さい場合、SQL Server のクエリ実行エンジンは、メモリ内全体の並べ替え操作を実行しようとします。 Nの値が大きい場合、クエリ実行エンジンは、 N をパラメーターとしない、より汎用的な並べ替え方法を使用します。
UDX 拡張操作 (UDX) は、SQL Server の数ある操作のうちの XQuery 操作と XPath 操作の一つを実装します。

- 拡張演算子 (UDX) FOR XML は、入力するリレーショナル行セットを 1 つの出力行の 1 つの BLOB 列の XML 表現にシリアル化するために使用されます。 この操作は、順序を区別する XML 集計操作です。

- 拡張演算子 (UDX) XML SERIALIZER は、順序に依存する XML 集計演算子です。 この操作は、XML ドキュメントの順序で XML ノードまたは XQuery スカラーを表す行を入力し、単一出力行の単一 XML 列にシリアル化した XML BLOB を生成します。

- 拡張演算子 (UDX) XML FRAGMENT SERIALIZER は、XQuery 挿入データ変更拡張機能に挿入される XML フラグメントを表す入力行の処理に使用される特殊な種類の XML SERIALIZER です。

- 拡張演算子 (UDX) XQUERY STRING は、XML ノードを表す入力行の XQuery 文字列値を評価します。 これは順序を区別する文字列集計操作です。 この操作では、入力の文字列値を含む XQuery スカラーを表す列を持つ 1 行が出力されます。

- 拡張演算子 (UDX) XQUERY LIST DECOMPOSER は XQuery リスト分解演算子です。 入力が XSD リストで想定されている型の場合、この操作では、XML ノードを表す入力行ごとに、リスト要素の値を含む XQuery スカラーを表す 1 行以上の行が生成されます。

- 拡張演算子 (UDX) XQUERY DATA は、XML ノードを表す入力の XQuery fn:data() 関数を評価します。 これは順序を区別する文字列集計操作です。 この操作では、fn:data() の結果を含む XQuery スカラーを表す列を持つ 1 行が出力されます。

- 拡張演算子 XQUERY CONTAINS は、XML ノードを表す入力の XQuery fn:contains() 関数を評価します。 これは順序を区別する文字列集計操作です。 この操作では、fn:contains() の結果を含む XQuery スカラーを表す列を持つ 1 行が出力されます。

- 拡張演算子 UPDATE XML NODE は、XQuery の XML ノードを更新し、XML 型の modify() メソッドのデータ変更拡張機能を置き換えます。

UDX 操作には、論理操作と物理操作の両方があります。
ユニオン Union 操作は、複数の入力をスキャンし、重複行を削除して、スキャンした各行を出力します。

Union は論理操作です。
更新 Update 操作は、クエリ実行プランの [Properties] ウィンドウで指定されているオブジェクトの入力の各行を更新します。

Update は論理操作です。 物理操作は 、テーブルの更新インデックスの更新クラスター化インデックスの更新、または 列ストア インデックスの更新です
なし ウィンドウ集計 Window Aggregate 演算子は、ウィンドウ定義を使用して 1 つ以上の集計式を評価し、その結果をデータ ストリームに追加します。

ウィンドウ集計 は、論理操作と物理操作です。
ウィンドウ スプール Window Spool 操作は、各行をその行に関連付けられたウィンドウを表す行セットに拡張します。 クエリでは、OVER 句でクエリの結果セット内のウィンドウを定義してから、ウィンドウ関数がウィンドウ内の各行の値を計算します。 演算子は、すべての入力行を tempdb データベース またはメモリ内の非表示の作業テーブルに格納します。

Window Spool は論理操作でもあり、物理操作でもあります。

注記

ドキュメントでは、一般的にインデックスに関して B ツリーという用語が使用されます。 行ストア インデックスで、データベース エンジンによって B+ ツリーが実装されます。 これは、列ストア インデックスやメモリ最適化テーブルのインデックスには適用されません。 詳細については、「SQL Server と Azure SQL のインデックスのアーキテクチャとデザイン ガイド」を参照してください。