次の方法で共有


プラン表示の論理操作と物理操作のリファレンス

操作は、 SQL Server でクエリやデータ操作言語 (DML) ステートメントを実行する方法を示します。 クエリ オプティマイザーでは、操作を使用して、クエリで指定された結果を作成するクエリ プラン、または DML ステートメントで指定された操作を実行するクエリ プランが構築されます。 クエリ プランは、物理操作をツリー構成で表現したものです。 クエリ プランを表示するには、SET SHOWPLAN ステートメント、 SQL Server Management Studioのグラフィカル実行プラン オプション、または SQL Server Profiler Showplan イベント クラスを使用します。

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

論理演算子
論理操作は、ステートメントの処理に使用される関係代数操作を表します。 つまり、論理操作は、どのような操作を実行する必要があるかを、概念的に示します。

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

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

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

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

  • Close() :Close() メソッドにより、物理操作はクリーンアップ操作を実行し、物理操作自体がシャットダウンされます。 物理操作は、 Close() 呼び出しを 1 つだけ受け取ります。

GetNext() メソッドは、データ行を 1 行返します。このメソッドが呼び出された回数は、SET STATISTICS PROFILE ON または SET STATISTICS XML ON を使用して生成されるプラン表示出力で ActualRows として表示されます。 これらの SET オプションの詳細については、「 SET STATISTICS PROFILE (Transact-SQL)」 および 「SET STATISTICS XML (Transact-SQL)」を参照してください。

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

ActualRebinds および ActualRewinds は、SET STATISTICS XML ON を使用して生成された XML プラン表示出力に存在します。 これらは、非クラスター化インデックス スプール行数スプールテーブル スプールRemote QuerySortおよびテーブル値関数演算子に対してのみ設定されます。 StartupExpression 属性が TRUE に設定されている場合は、 演算子と Filter 演算子に対Assertして ActualRebindsActualRewinds を設定することもできます。

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

関連するカウンター ActualEndOfScansは、プラン表示出力が SET STATISTICS XML ON を使用して生成されている場合のみ使用できます。 物理操作がデータ ストリームの最後に達するたびに、このカウンターの値は 1 ずつ増加します。 物理操作がデータ ストリームの最後に達することのできる回数は、0 回、1 回、あるいは複数回です。 再バインドおよび巻き戻しと同様に、スキャンの終了回数は、ループ結合内部での操作の場合のみ 2 回以上になります。 スキャンの終了回数は、再バインドおよび巻き戻しの合計数以下になる必要があります。

物理操作と論理操作の対応関係

クエリ オプティマイザーでは、ツリー構成の論理操作としてクエリ プランが作成されます。 クエリ オプティマイザーでは、プランが作成されると、各論理操作にとって最も効率的な物理操作が選択されます。 クエリ オプティマイザーでは、論理操作をどの物理操作から実装するかを判断するために、コストベースの手法が使用されます。

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

操作の説明

このセクションには、論理演算子と物理演算子の説明が含まれています。

グラフィカルな実行プランのアイコン プラン表示操作 説明
なし Aggregate Aggregate 操作は、MIN、MAX、SUM、COUNT、AVG のいずれかが含まれた式を計算します。 Aggregate は、論理操作または物理操作です。
算術式演算子アイコン Arithmetic Expression Arithmetic Expression 操作は、行の既存の値から新しい値を計算します。 Arithmetic Expressionは、SQL Server 2014 では使用されません。
Assert 操作アイコン Assert Assert 操作は、状態の検証を行います。 たとえば、参照整合性の検証や、スカラー サブクエリによって 1 行返されることの確認を行います。 入力行ごとに、演算子は Assert 実行プランの列の Argument 式を評価します。 この式が NULL であると評価されると、行は Assert 操作を通過して、クエリの実行が継続されます。 式が NULL 以外の値に評価されると、相応のエラーが発生します。 Assert 操作は物理操作です。
言語要素の割り当てアイコン Assign Assign 操作は、変数に式の値または定数値を代入します。 Assign は言語要素です。
なし Asnyc Concat Asnyc Concat 操作は、リモート クエリ (分散クエリ) でのみ使用されます。 Async Concat には n 個の子ノードと 1 個の親ノードが含まれます。 通常、子ノードのいくつかはリモート コンピューターで、分散クエリに参加しています。 Asnyc Concat は、すべての子ノードに同時に open() 呼び出しを行い、各子ノードにビットマップを適用します。 Async Concat では、1 に設定されているビットごとに、要求時に出力行が親ノードに送信されます。
ビットマップ操作アイコン ビットマップ Bitmap SQL Serverでは、 演算子をBitmap使用して、並列クエリ プランでビットマップ フィルター処理を実装します。 ビットマップ フィルター処理では、 演算子などの別の演算子を介して行を渡す前に、結合レコードを生成できないキー値を持つ行を削除することで、クエリの実行速度が Parallelism 向上します。 ビットマップ フィルターは、操作ツリーの特定の部分にあるテーブルから得られた一連の値の圧縮表現を使用して、同じツリーの別の部分にある 2 つ目のテーブルから行を抽出します。 不要な行をクエリの初期段階で排除することにより、それ以降の操作に渡される行数が減り、その結果、クエリの全体的なパフォーマンスが向上します。 オプティマイザーは、どのような場合にビットマップの選択度が効果を期待できる程度に高くなるか、また、どのような操作にフィルターを適用すべきかを判断します。 Bitmap は物理操作です。
ビットマップ操作アイコン ビットマップ Bitmap Create Bitmap Create 操作は、ビットマップが作成されるプラン表示の出力に使用されます。 Bitmap Create は論理操作です。
ブックマーク参照操作アイコン Bookmark Lookup Bookmark Lookup 操作は、ブックマーク (行 ID またはクラスター化キー) を使用してテーブルまたはクラスター化インデックスの対応行を参照します。 Argument列には、テーブルまたはクラスター化インデックスの行を検索するために使用されるブックマーク ラベルが含まれています。 Argument列には、行が検索されるテーブルまたはクラスター化インデックスの名前も含まれます。 WITH PREFETCH 句が列に表示される場合、クエリ プロセッサは、テーブルまたはクラスター化インデックスで Argument ブックマークを検索するときに非同期プリフェッチ (先読み) を使用するのが最適であると判断しました。

Bookmark Lookupは、SQL Server 2014 では使用されません。 代わりに、Clustered Index Seek および RID Lookup によってブックマーク参照機能が提供されます。 Key Lookup 操作でもこの機能が提供されます。
なし Branch Repartition 並列クエリ プランでは、反復子に概念上の領域が存在する場合があります。 このような領域内にある反復子はすべて、並列スレッドにより実行できます。 領域自体は、順次実行される必要があります。 個別の領域内の Parallelism 反復子のいくつかは、Branch Repartition と呼ばれます。 このような 2 つの領域間の境界にある Parallelism 反復子は、Segment Repartition と呼ばれます。 Branch RepartitionSegment Repartition は論理操作です。
なし Broadcast Broadcast には 1 つの子ノードと n 個の 親ノードがあります。 Broadcast では、要求時に複数のコンシューマーに入力行が送信されます。 各コンシューマーがすべての行を取得します。 たとえば、すべてのコンシューマーがハッシュ結合のビルド側の場合、ハッシュ テーブルの n 個のコピーがビルドされます。
ビルド ハッシュ演算子アイコン Build Hash xVelocity メモリ最適化列ストア インデックスのバッチ ハッシュ テーブルの作成を示します。
なし Cache Cache は、 Spool 演算子の特殊なバージョンです。 データは 1 行分しか格納されません。 Cache は論理操作です。 Cacheは、SQL Server 2014 では使用されません。
クラスター化インデックス削除操作アイコン Clustered Index Delete Clustered Index Delete 操作は、クエリ実行プランの Argument 列 (引数) で指定されているクラスター化インデックスから行を削除します。 Argument 列に WHERE:() 述語がある場合、その述語に適合する行だけが削除されます。 Clustered Index Delete は物理操作です。
クラスター化インデックス挿入操作アイコン Clustered Index Insert Clustered Index Insert プラン表示操作では、Argument 列で指定されているクラスター化インデックスに、入力からの行が挿入されます。 また、Argument 列には、各列に設定する値を示す SET:() 述語も含まれます。 挿入値の子がない場合 Clustered Index Insert 、挿入された行は演算子自体から Insert 取得されます。 Clustered Index Insert は物理操作です。
クラスター化インデックスマージ演算子 Clustered Index Merge Clustered Index Merge 操作は、マージ データ ストリームをクラスター化インデックスに適用します。 演算子は、演算子の列で指定されたクラスター化インデックスから行を Argument 削除、更新、または挿入します。 実行される実際の操作は、演算子の 列でArgument指定された ACTION 列のランタイム値によって異なります。 Clustered Index Merge は物理操作です。
クラスター化インデックス スキャン操作アイコン Clustered Index Scan Clustered Index Scan 操作は、クエリ実行プランの Argument 列 (引数) に指定されたクラスター化インデックスをスキャンします。 オプションの WHERE:() 述語がある場合、この述語に適合する行だけが返されます。 Argument 列 (引数) に ORDERED 句が含まれている場合は、クラスター化インデックスの並べ替え順での行出力が要求されています。 ORDERED 句がない場合は、ストレージ エンジンが最適な方法でインデックスをスキャンします。出力の並べ替えは必ずしも行われません。 Clustered Index Scan は論理操作でもあり、物理操作でもあります。
クラスター化インデックス シーク操作アイコン Clustered Index Seek Clustered Index Seek 操作は、インデックスのシーク機能を使用してクラスター化インデックスから行を取得します。 Argument列には、使用されているクラスター化インデックスの名前と SEEK:() 述語が含まれます。 ストレージ エンジンはインデックスを使用して、この SEEK:() 述語に適合する行だけを処理します。 また、WHERE:() 述語を含めることもできます。この場合、ストレージ エンジンは、SEEK:() 述語に適合するすべての行が WHERE:() 述語に適合するかどうかを評価します。ただし、WHERE:() 述語は省略可能であり、処理を行うときにインデックスを使用しません。

列に Argument ORDERED 句が含まれている場合、クエリ プロセッサは、クラスター化インデックスが並べ替えた順序で行を返す必要があると判断しました。 ORDERED 句がない場合、ストレージ エンジンが最適な方法でインデックスを検索します。ただし、出力が並べ替えられるとは限りません。 出力で行の順序を保持する場合、並べ替えられていない出力に比べて効率が低下することがあります。 LOOKUP キーワードを指定すると、ブックマーク参照が行われます。 SQL Server 2008 以降のバージョンでは、 演算子はブックマーク参照機能をKey Lookup提供します。 Clustered Index Seek は論理操作でもあり、物理操作でもあります。
クラスター化インデックスの更新操作アイコン Clustered Index Update 演算子は Clustered Index Update 、 列で指定されたクラスター化インデックスの入力行を Argument 更新します。WHERE:() 述語が存在する場合、この述語を満たす行のみが更新されます。 SET:() 述語がある場合、更新される各列がこの値に設定されます。 DEFINE:() 述語がある場合、この操作によって定義される値が一覧表示されます。 これらの値は、SET 句、またはこの操作内かこのクエリ内で参照されることがあります。 Clustered Index Update は論理操作でもあり、物理操作でもあります。
操作の折りたたみアイコン 演算子 Collapse Collapse 操作により、更新処理が最適化されます。 更新が実行されると、(Split 操作を使用して) 削除と挿入に分割されます。 Argument列には、キー列のリストを指定する GROUP BY:() 句が含まれています。 クエリ プロセッサでは、同じキー値を削除して挿入する操作が隣接する行で検出されると、これらの個別の操作を 1 つのより効率的な更新操作に置き換えます。 Collapse は論理操作でもあり、物理操作でもあります。
列ストア インデックス スキャン Columnstore Index Scan 演算子は Columnstore Index Scan 、クエリ実行プランの列で Argument 指定された列ストア インデックスをスキャンします。
コンピューティング スカラー演算子アイコン Compute Scalar 演算子は Compute Scalar 、式を評価して計算されたスカラー値を生成します。 この値は、ユーザー、クエリの参照先、またはその両方に返されることがあります。 両方に返される例としては、フィルター述語や結合述語があります。 Compute Scalar は論理操作でもあり、物理操作でもあります。

Compute Scalar SET STATISTICS XML によって生成されたプラン表示に表示される演算子には、 要素が RunTimeInformation 含まれていない可能性があります。 [実際の実行プランを含める] オプションが選択されているときは、グラフィカルなプラン表示の[プロパティ] ウィンドウに [実際の行数] [実際の再バインド数] 、および [実際の巻き戻し数] SQL Server Management Studioが表示されないことがあります。 その場合、コンパイルされたクエリ プランでは Compute Scalar 操作が使用されていたのに、実行時のクエリ プランではこの操作の作業が別の操作によって行われたことを意味します。 また、SET STATISTICS PROFILE によって生成されるプラン表示出力の実行の数は、SET STATISTICS XML によって生成されるプラン表示の再バインドと巻き戻しの合計と同じになります。
連結演算子アイコン Concatenation Concatenation 操作は複数の入力をスキャンし、スキャンした各行を返します。 連結 は通常、Transact-SQL UNION ALL コンストラクトを実装するために使用されます。 Concatenation 物理操作は入力が複数で出力が 1 つです。 この操作では、最初の入力ストリームの行が出力ストリームにコピーされ、同じ動作が以降の各入力ストリームに対して行われます。 Concatenation は論理操作でもあり、物理操作でもあります。
定数スキャン操作アイコン Constant Scan 演算子は Constant Scan 、1 つ以上の定数行をクエリに導入します。 Compute Scalar演算子は、 演算子によってConstant Scan生成された行に列を追加するために、 の後Constant Scanによく使用されます。
Convert (データベース エンジン) 言語要素アイコン Convert Convert 操作は、スカラー データ型間の変換を行います。 Convert は言語要素です。
なし Cross Join Cross Join 操作は、最初 (上部) の入力の各行と 2 番目 (下部) の入力の各行を結合します。 Cross Join は論理操作です。
Cursor catchall cursor operator icon catchall 汎用アイコンは、グラフィカルなプラン表示を生成するロジックで、反復子に適したアイコンが見つからない場合に表示されます。 汎用アイコンは、必ずしもエラー状態を示しているわけではありません。 青 (反復子の場合)、オレンジ色 (カーソルの場合)、緑 (Transact-SQL 言語要素の場合) の 3 つのキャッチオール アイコンがあります。
なし カーソル カーソル 論理操作および物理操作は、カーソル操作に関するクエリまたは更新処理がどのように実行されたかを示すために使用されます。 カーソル物理操作は、キーセット ドリブン カーソルの使用など、カーソルの処理に使用される物理的な実装アルゴリズムを示します。 カーソル実行の各ステップは、物理操作に関係します。 カーソル論理操作は、カーソルが読み取り専用であるなどの、カーソルのプロパティを示します。

論理操作には、Asynchronous、Optimistic、Primary、Read Only、Scroll Locks、Secondary、および Synchronous があります。

物理操作には、Dynamic、Fetch Query、Keyset、Population Query、Refresh Query、および Snapshot があります。
言語要素の宣言アイコン 言語 Declare 演算子は Declare 、クエリ プランにローカル変数を割り当てます。 Declare は言語要素です。
Delete (データベース エンジン) 操作アイコン Delete 演算子は Delete 、列の省略可能な述語 Argument を満たすオブジェクト行から削除します。
スキャン操作の削除アイコン Deleted Scan Deleted Scan 操作は、削除されたテーブルをトリガー内でスキャンします。
なし Distinct Distinct 操作は、行セットや値のコレクションから重複部分を削除します。 Distinct は論理操作です。
なし Distinct Sort 論理演算子は Distinct Sort 入力をスキャンし、重複を削除し、列の DISTINCT ORDER BY:() 述語 Argument で指定された列で並べ替えます。 Distinct Sort は論理操作です。
ストリームの並列化操作アイコン Distribute Streams Distribute Streams 操作は、並列クエリ プランのみで使用されます。 Distribute Streams 操作は、レコードの 1 つの入力ストリームを使用して複数の出力ストリームを生成します。 レコードの内容と形式は変更されません。 入力ストリームの各レコードは、出力ストリームのいずれかに含まれます。 この操作では、出力ストリーム内で入力レコードの相対順序が自動的に保持されます。 通常、特定の入力レコードが属する出力ストリームを判断するにはハッシュ操作が使用されます。

出力がパーティション分割されている場合、 Argument 列には PARTITION COLUMNS:() 述語とパーティション分割列が含まれます。 Distribute Streams は論理操作です。
動的カーソル操作アイコン Dynamic Dynamic 操作は、他のユーザーによる変更をすべて表示できるカーソルを使用します。
Spool 操作アイコン Eager Spool Eager Spool 演算子は、入力全体を受け取り、各行をデータベースに格納されている非表示の一時オブジェクトにtempdb格納します。 演算子が (たとえば、演算子によって Nested Loops ) 巻き戻されるが、再バインドが必要ない場合は、入力を再スキャンする代わりにスプール・データが使用されます。 再バインドが必要な場合は、スプールされたデータが破棄され、(再バインドされる) 入力の再スキャンによりスプール オブジェクトが再構築されます。 Eager Spool 操作では、操作のスプール ファイルが "集中的" に構築されます。たとえば、スプールの親操作によって最初の行が要求されると、スプール操作によって入力操作からのすべての行が使用され、それらの行がスプールに格納されます。 Eager Spool は論理操作です。
Fetch query cursor operator icon Fetch Query Fetch Query 操作は、カーソルに対してフェッチが実行されたときに行を取得します。
フィルター (データベース エンジン) 操作アイコン Assert Filter 演算子は入力をスキャンし、列に表示されるArgumentフィルター式 (述語) を満たす行のみを返します。
なし Flow Distinct Flow Distinct 論理操作は入力をスキャンし、重複部分を削除します。 演算子は Distinct 出力を生成する前にすべての入力を使用しますが、 FlowDistinct 演算子は入力から取得された各行を返します (その行が重複している場合を除き、その場合は破棄されます)。
なし Full Outer Join Full Outer Join 論理操作は、最初 (上部) の入力で結合述語に適合し、2 番目 (下部) の入力の各行と結合された各行を返します。 また、以下の行も返します。

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

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



一致する値がない入力は NULL 値として返されます。 Full Outer Join は論理操作です。
ストリームの並列処理操作の収集アイコン Gather Streams Gather Streams 操作は、並列クエリ プランでのみ使用されます。 Gather Streams 操作は複数の入力ストリームを使用し、入力ストリームを組み合わせてレコードの単一出力ストリームを作成します。 レコードの内容と形式は変更されません。 この操作で順序を保持する場合は、すべての入力ストリームが並べ替えられている必要があります。 出力が順序付けされている場合、 Argument 列には ORDER BY:() 述語と順序付けされる列の名前が含まれます。 Gather Streams は論理操作です。
ハッシュ一致演算子アイコン Hash Match Hash Match 操作は、ビルド入力の行ごとにハッシュ値を計算してハッシュ テーブルを作成します。 ハッシュ値の作成に使用される列のリストを含む HASH:() 述語が列に Argument 表示されます。 次に、該当するプローブ行ごとに同じハッシュ関数を使用してハッシュ値が計算され、ハッシュ テーブル内で一致検索が行われます。 残差述語が存在する場合 (列に Argument RESIDUAL:() で識別されます)、行が一致と見なされるためには、その述語も満たす必要があります。 動作は、次に示すように、実行している論理操作によって異なります。

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

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

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



Hash Match は物理操作です。
If 言語要素アイコン If If 操作では、式に基づく条件処理を実行します。 If は言語要素です。
なし Inner Join Inner Join 論理操作は、最初 (上部) の入力と 2 番目 (下部) の入力の結合に適合する各行を返します。
Insert (データベース エンジン) 操作アイコン Insert 論理演算子は Insert 、入力から列で指定されたオブジェクトに各行を Argument 挿入します。 物理操作は、Table Insert 操作、Index Insert 操作、または Clustered Index Insert 操作のいずれかです。
挿入されたスキャン操作アイコン Inserted Scan Inserted Scan 操作は、 inserted テーブルをスキャンします。 Inserted Scan 操作は論理操作でもあり、物理操作でもあります。
組み込み言語要素アイコン Intrinsic 演算子は Intrinsic 、内部 Transact-SQL 関数を呼び出します。 Intrinsic は言語要素です。
Iterator catchall 演算子アイコン Iterator Iterator 汎用アイコンは、グラフィカルなプラン表示を生成するロジックで、反復子に適したアイコンが見つからない場合に表示されます。 汎用アイコンは、必ずしもエラー状態を示しているわけではありません。 青 (反復子の場合)、オレンジ (カーソルの場合)、緑 (Transact-SQL 言語コンストラクトの場合) の 3 つのキャッチオール アイコンがあります。
ブックマーク参照操作アイコン Key Lookup 演算子は Key Lookup 、クラスター化インデックスを持つテーブルに対するブックマーク参照です。 Argument列には、クラスター化インデックスの名前と、クラスター化インデックス内の行を検索するために使用されるクラスタリング キーが含まれます。 Key Lookup は常に演算子を Nested Loops 伴います。 WITH PREFETCH 句が列に表示される場合、クエリ プロセッサは、クラスター化インデックスで Argument ブックマークを検索するときに非同期プリフェッチ (先読み) を使用するのが最適であると判断しました。

クエリ プランで演算子を Key Lookup 使用すると、クエリがパフォーマンス チューニングの恩恵を受ける可能性があることを示します。 たとえば、カバリング インデックスを追加することにより、クエリ パフォーマンスが向上する場合があります。
キーセット カーソル操作アイコン Keyset Keyset 操作では、カーソルを使用して更新内容を参照できます。ただし、他のユーザーが挿入した内容は参照できません。
Language 要素キャッチオール アイコン Language Element Language Element 汎用アイコンは、グラフィカルなプラン表示を生成するロジックで、反復子に適したアイコンが見つからない場合に表示されます。 汎用アイコンは、必ずしもエラー状態を示しているわけではありません。 青 (反復子の場合)、オレンジ (カーソルの場合)、緑 (Transact-SQL 言語コンストラクトの場合) の 3 つのキャッチオール アイコンがあります。
Spool 操作アイコン Lazy Spool Lazy Spool 論理演算子は、入力の各行を、データベースに格納されている非表示の一時オブジェクトにtempdb格納します。 演算子が (たとえば、演算子によって Nested Loops ) 巻き戻されるが、再バインドが必要ない場合は、入力を再スキャンする代わりにスプール・データが使用されます。 再バインドが必要な場合は、スプールされたデータが破棄され、(再バインドされる) 入力の再スキャンによりスプール オブジェクトが再構築されます。 Lazy Spool 操作のスプール ファイルは "レイジー" 手法で構築されます。つまり、1 回にすべての行を処理するのではなく、スプールの親操作から行が要求されるたびに入力操作から行を取得し、その行をスプールに格納します。 Lazy Spool は論理操作です。
なし Left Anti Semi Join Left Anti Semi Join 操作は、最初 (上部) の入力の中に 2 番目 (下部) の入力に一致する行がない場合に該当する行を返します。 列に Argument 結合述語が存在しない場合、各行は一致する行になります。 Left Anti Semi Join は論理操作です。
なし Left Outer Join Left Outer Join 操作は、最初 (上部) の入力と 2 番目 (下部) の入力の結合に適合する各行を返します。 また、最初 (上部) の入力の中で 2 番目 (下部) の入力に一致する行がない行も返します。 2 番目の入力の一致しない行は NULL 値として返されます。 列に Argument 結合述語が存在しない場合、各行は一致する行になります。 Left Outer Join は論理操作です。
なし Left Semi Join Left Semi Join 操作は、最初 (上部) の入力の中に 2 番目 (下部) の入力に一致する行がある場合に該当する行を返します。 列に Argument 結合述語が存在しない場合、各行は一致する行になります。 Left Semi Join は論理操作です。
ログ行スキャン操作アイコン Log Row Scan Log Row Scan 操作は、トランザクション ログをスキャンします。 Log Row Scan は論理操作でもあり、物理操作でもあります。
マージ間隔操作アイコン Merge Interval Merge Interval 操作は、重複している可能性のある複数の間隔をマージして、重複しない最小限の間隔を作成します。この間隔は、インデックス エントリのシークに使用されます。 通常、この演算子は演算子よりも 1 つ以上の Compute Scalar 演算子 Constant Scan の上に表示され、この演算子がマージする間隔 (行の列として表されます) が構築されます。 Merge Interval は論理操作でもあり、物理操作でもあります。
結合操作アイコン マージ マージ結合 Merge Join 操作は Inner Join、Left Outer Join、Left Semi Join、Left Anti Semi Join、Right Outer Join、Right Semi Join、Right Anti Semi Join、Union の各論理操作を実行します。

Argumentこの列では、マージ結合演算子には、操作が一対多結合を実行している場合は MERGE:() 述語、操作で多対多結合を実行している場合は MANY-TO-MANY MERGE:() 述語が含まれます。 Argument列には、操作の実行に使用される列のコンマ区切りのリストも含まれています。 Merge Join 操作には、それぞれの列を基準に並べ替えられた 2 つの入力が必要です。この並べ替えを行うときは、クエリ プランに明示的な並べ替え操作を挿入することが可能です。 明示的な並べ替えが必要でない場合、Merge Join 操作は特に効果的です。たとえば、データベースに適切な B ツリー インデックスがある場合、またはマージ結合とロール アップを含むグループ化など、複数の操作で並べ替え順序を利用できる場合などです。 Merge Join は物理操作です。
入れ子になったループ操作アイコン Nested Loops Nested Loops 操作は、内部結合、左外部結合、左半結合、左反半結合の各論理操作を実行します。 ネステッド ループ結合では、外部テーブルの行ごとに内部テーブルが検索されます。検索には、通常はインデックスが使用されます。 クエリ プロセッサにより、予想コストに基づいて、内部入力でインデックスを検索する場所の絞り込みを向上するために、外部入力を並べ替えるかどうかが判断されます。 列の (省略可能) 述語を Argument 満たす行は、実行されている論理操作に基づいて、該当する場合に返されます。 Nested Loops は物理操作です。
非クラスター化インデックス削除操作アイコン Nonclustered Index Delete 演算子は Nonclustered Index Delete 、列で指定された非クラスター化インデックスから入力行を Argument 削除します。 Nonclustered Index Delete は物理操作です。
非クラスター化インデックス挿入操作アイコン Index Insert 演算子は Index Insert 、入力から列に指定された非クラスター化インデックスに行を Argument 挿入します。 また、Argument 列には、各列に設定する値を示す SET:() 述語も含まれます。 Index Insert は物理操作です。
非クラスター化インデックス スキャン操作アイコン Index Scan 演算子は Index Scan 、列で指定された非クラスター化インデックスからすべての行を Argument 取得します。 オプションの WHERE:() 述語が列に Argument 表示される場合は、述語を満たす行のみが返されます。 Index Scan は論理操作でもあり、物理操作でもあります。
非クラスター化インデックス シーク操作アイコン Index Seek Index Seek 操作は、インデックスのシーク機能を使用して非クラスター化インデックスから行を取得します。 Argument列には、使用されている非クラスター化インデックスの名前が含まれています。 また、SEEK:() 述語も含まれます。 ストレージ エンジンはインデックスを使用して、SEEK:() 述語に適合する行だけを処理します。 必要に応じて、この列には WHERE:() 述語が含まれることがあります。この述語は、ストレージ エンジンによって SEEK:() 述語に適合するすべての行に対して評価されます (この処理を行うのにインデックスは使用されません)。 列に Argument ORDERED 句が含まれている場合、クエリ プロセッサは、非クラスター化インデックスが並べ替えた順序で行を返す必要があると判断しました。 ORDERED 句がない場合は、ストレージ エンジンにより、最適な方法でインデックスが検索されます (出力が並べ替えられるとは限りません)。 出力順序が保持されるようにすると、並べ替えずに出力する場合よりも効率が低下する可能性があります。 Index Seek は論理操作でもあり、物理操作でもあります。
非クラスター化インデックス スプール演算子アイコン Index Spool Index Spool 物理操作には、列に SEEK:() 述語がArgument含まれています。 Index Spool 演算子は、入力行をスキャンし、各行のコピーを非表示のスプール ファイル (データベースにtempdb格納され、クエリの有効期間中のみ既存) に配置し、行に非クラスター化インデックスを作成します。 さらに、インデックスのシーク機能を使用して、SEEK:() 述語に適合する行だけを出力します。 演算子が (たとえば、演算子によって Nested Loops ) 巻き戻されるが、再バインドが必要ない場合は、入力を再スキャンする代わりにスプール・データが使用されます。
非クラスター化インデックス更新操作アイコン Nonclustered Index Update 物理演算子は Nonclustered Index Update 、列で指定された非クラスター化インデックスの入力から行を Argument 更新します。 SET:() 述語がある場合、更新される各列がこの値に設定されます。 Nonclustered Index Update は物理操作です。
オンライン インデックス挿入操作アイコン Online Index Insert Online Index Insert 物理操作は、インデックスの作成操作、変更操作、または削除操作がオンラインで実行されることを示します。 つまり、インデックス操作の実行中に、基になるテーブル データをユーザーが利用することができます。
なし Parallelism 演算子は Parallelism 、ストリームの分散、ストリームの収集、およびストリームの再パーティション分割の論理操作を実行します。 列には Argument 、パーティション分割される列のコンマ区切りのリストを含む PARTITION COLUMNS:() 述語を含めることができます。 列には Argument ORDER BY:() 述語を含め、パーティション分割中の並べ替え順序を保持する列を一覧表示することもできます。 Parallelism は物理操作です。

注: クエリが並列クエリとしてコンパイルされているが、実行時にシリアル クエリとして実行される場合、SET STATISTICS XML または SQL Server Management Studio の [実際の実行プランを含める] オプションを使用して生成されたプラン表示出力には、 演算子のRunTimeInformationParallelism要素は含まれません。 SET STATISTICS PROFILE 出力では、実際の行数と実行の実際の数によって、演算子のゼロが Parallelism 表示されます。 いずれかの条件が発生した場合、演算子はクエリの Parallelism コンパイル中にのみ使用され、実行時クエリ プランでは使用されなかったことを意味します。 サーバー上での同時実行の負荷が高い場合は、並列クエリ プランが直列に実行されることがあります。
パラメーター テーブル スキャン 操作アイコン Parameter Table Scan Parameter Table Scan 操作により、現在のクエリのパラメーターとして機能しているテーブルをスキャンします。 通常、この操作は、ストアド プロシージャ内の INSERT クエリに対して使用されます。 Parameter Table Scan は論理操作でもあり、物理操作でもあります。
なし Partial Aggregate Partial Aggregate は、並列プランで使用されます。 ディスクへの書き込み ("スピル" と呼ばれます) が必要にならないように、できるだけ多くの入力行に集計関数が適用されます。 Hash Match は、パーティション集計を実装する唯一の物理演算子 (反復子) です。 Partial Aggregate は論理操作です。
Population query cursor operator icon Population Query Population Query 操作によって、カーソルが開かれたときにカーソルの作業テーブルを作成します。
クエリ カーソル操作の更新アイコン Refresh Query Refresh Query 操作は、フェッチ バッファーから行の現在のデータをフェッチします。
リモート削除操作アイコン Remote Delete Remote Delete 操作は、リモート オブジェクトから入力行を削除します。 Remote Delete は論理操作でもあり、物理操作でもあります。
remote index seek showplan operator Remote Index Scan Remote Index Scan 操作は、Argument 列に指定されたリモート インデックスをスキャンします。 Remote Index Scan は論理操作でもあり、物理操作でもあります。
remote index seek showplan operator Remote Index Seek Remote Index Seek 操作は、リモート インデックス オブジェクトのシーク機能を使用して行を取得します。 Argument列には、使用されているリモート インデックスの名前と SEEK:() 述語が含まれています。 Remote Index Seek は論理操作でもあり、物理操作でもあります。
リモート挿入操作アイコン Remote Insert Remote Insert 操作では、入力行がリモート オブジェクトに挿入されます。 Remote Insert は論理操作でもあり、物理操作でもあります。
リモート クエリ操作アイコン Remote Query Remote Query 操作では、リモート ソースにクエリを送信します。 リモート サーバーに送信されたクエリのテキストが列に Argument 表示されます。 Remote Query は論理操作でもあり、物理操作でもあります。
リモート スキャン 操作アイコン Remote Scan Remote Scan 操作は、リモート オブジェクトをスキャンします。 リモート オブジェクトの名前が列に Argument 表示されます。 Remote Scan は論理操作でもあり、物理操作でもあります。
リモート更新操作アイコン Remote Update Remote Update 操作は、リモート オブジェクトの入力行を更新します。 Remote Update は論理操作でもあり、物理操作でもあります。
再パーティション分割ストリーム並列処理操作アイコン Repartition Streams Repartition Streams 操作では、複数のストリームを使用して、複数のレコードのストリームが生成されます。 レコードの内容と形式は変更されません。 クエリ オプティマイザーでビットマップ フィルターが使用される場合は、出力ストリームの行数が少なくなります。 入力ストリームの各レコードは、1 つの出力ストリームに配置されます。 この操作で順序を保持する場合、すべての入力ストリームが並べ替えられ、いくつかの並べ替え済みの出力ストリームにマージされる必要があります。 出力がパーティション分割されている場合、 Argument 列には PARTITION COLUMNS:() 述語とパーティション分割列が含まれます。出力が順序付けされている場合、 Argument 列には ORDER BY:() 述語と順序付けされる列が含まれます。 Repartition Streams は論理操作です。 この操作は、並列クエリ プランのみで使用されます。
結果言語要素アイコン Result Result 操作は、クエリ プランの最後に返されるデータです。 これは通常、プラン表示のルート要素です。 Result は言語要素です。
RID 参照演算子アイコン RID Lookup RID Lookup は、指定された行識別子 (RID) を使用する、ヒープ上のブックマーク参照です。 Argument列には、テーブル内の行を検索するために使用されるブックマーク ラベルと、行が検索されるテーブルの名前が含まれます。 RID Lookup は、常に NESTED LOOP JOIN を伴います。 RID Lookup は物理操作です。 ブックマーク参照の詳細については、MSDN の SQL Server ブログの「ブックマーク参照」を参照してください。
なし Right Anti Semi Join Right Anti Semi Join 操作は、2 番目 (下部) の入力の中で最初 (上部) の入力に一致する行がない各行を出力します。 一致する行は、列の Argument 述語を満たす行として定義されます (述語が存在しない場合、各行は一致する行です)。 Right Anti Semi Join は論理操作です。
なし Right Outer Join Right Outer Join 操作は、2 番目 (下部) の入力と最初 (上部) の入力の一致行との結合に適合する各行を返します。 また、2 番目の入力に最初の入力に一致する行がない場合は、2 番目の入力が NULL と結合された行も返します。 列に Argument 結合述語が存在しない場合、各行は一致する行になります。 Right Outer Join は論理操作です。
なし Right Semi Join Right Semi Join 操作は、2 番目 (下部) の入力の中に最初 (上部) の入力と一致する行があれば、該当する行を返します。 列に Argument 結合述語が存在しない場合、各行は一致する行になります。 Right Semi Join は論理操作です。
行数スプール操作アイコン Row Count Spool Row Count Spool 操作では入力がスキャンされて存在する行数がカウントされ、同数の行がデータなしで返されます。 この操作は、行に含まれているデータではなく、行の存在チェックが重要な場合に使用されます。 たとえば、演算子が Nested Loops 左半結合操作を実行し、結合述語が内部入力に適用される場合、行数スプールが演算子の内部入力の先頭に Nested Loops 配置される場合があります。 その後、 Nested Loops 演算子は、外部行を返すかどうかを判断するために、行数スプールによって出力される行の数を決定できます (内部側からの実際のデータは必要ないため)。 Row Count Spool は物理操作です。
セグメント操作アイコン セグメント Segment Segment は論理操作でもあり、物理操作でもあります。 この操作は、1 つまたは複数の列の値に基づいて入力セットをセグメントに分割します。 これらの列は、 Segment 操作に引数として表示されます。 この操作では、セグメントは 1 つずつ出力されます。
なし Segment Repartition 並列クエリ プランでは、反復子に概念上の領域が存在する場合があります。 このような領域内にある反復子はすべて、並列スレッドにより実行できます。 領域自体は、順次実行される必要があります。 個別の領域内の Parallelism 反復子のいくつかは、Branch Repartition と呼ばれます。 このような 2 つの領域間の境界にある Parallelism 反復子は、Segment Repartition と呼ばれます。 Branch RepartitionSegment Repartition は論理操作です。
シーケンス操作アイコン Sequence Sequence 操作によって、広範な更新プランを実行します。 機能的には、各入力を順次 (上から下へ) 実行します。 通常、各入力は異なるオブジェクトの更新です。 最後の (下部の) 入力からの行のみを返します。 Sequence は論理操作でもあり、物理操作でもあります。
シーケンス プロジェクト操作アイコン Sequence Project Sequence Project 操作は、列を追加し、順序付けされたセットに対する計算を実行します。 この操作は、1 つまたは複数の列の値に基づいて入力セットをセグメントに分割します。 この操作では、セグメントは 1 つずつ出力されます。 これらの列は、Sequence Project 操作の引数として表示されます。 Sequence Project は論理操作でもあり、物理操作でもあります。
スナップショット カーソル操作アイコン スナップショット Snapshot 操作は、他のユーザーによる変更を表示しないカーソルを作成します。
並べ替え操作アイコン Sort 演算子は Sort 、すべての受信行を並べ替えます。 Argumentこの操作によって重複が削除された場合は DISTINCT ORDER BY:() 述語、並べ替えられる列のコンマ区切りリストを含む ORDER BY:() 述語が列に含まれます。 列を昇順に並べ替える場合は、列名の前に値 ASC が付きます。降順に並べ替える場合は、列名の前に値 DESC が付きます。 Sort は論理操作でもあり、物理操作でもあります。
分割操作アイコン 分割 Split 演算子は Split 、更新処理を最適化するために使用されます。 この操作により、各更新操作が削除操作と挿入操作に分割されます。 Split は論理操作でもあり、物理操作でもあります。
スプール操作アイコン スプール Spool Spool 演算子は、中間クエリ結果をデータベースにtempdb保存します。
Stream 集計演算子アイコン Stream Aggregate Stream Aggregate 操作は、1 つ以上の列を基準にして行をグループ化し、クエリから返される 1 つ以上の集計式を計算します。 この操作の出力は、クエリ内のその後の操作から参照することも、クライアントに返すことも、あるいはその両方を行うこともできます。 Stream Aggregate 操作を使用するには、グループ内で列を基準にして入力を並べ替えておく必要があります。 並べ替えられたインデックスのシークやスキャンまたは前の Sort 操作が原因でデータがまだ並べ替えられていない場合は、オプティマイザーによって、この操作の前に Sort 操作が使用されます。 SHOWPLAN_ALL ステートメントまたはSQL Server Management Studioのグラフィカル実行プランでは、GROUP BY 述語の列が列にArgument一覧表示され、集計式が [定義された値] 列に一覧表示されます。 Stream Aggregate は物理操作です。
スイッチ 操作アイコン 操作アイコン スイッチ Switch は、 n 個の入力を取得する特殊な連結反復子です。 個々の Switch 操作には式が 1 つ関連付けられます。 Switch操作は式の戻り値 (0 から n -1 までの範囲) に応じて、適切な入力ストリームを出力ストリームにコピーします。 Switch 操作の用途の 1 つは、高速順方向専用カーソルを使用するクエリ プランに TOP などの特定の操作を実装することです。 Switch は論理操作でもあり、物理操作でもあります。
テーブル削除操作アイコン Table Delete 物理演算子は Table Delete 、クエリ実行プランの列で Argument 指定されたテーブルから行を削除します。
テーブル挿入操作アイコン Table Insert 演算子は Table Insert 、入力からクエリ実行プランの列で Argument 指定されたテーブルに行を挿入します。 また、Argument 列には、各列に設定する値を示す SET:() 述語も含まれます。 Table Insert に挿入値の子がない場合、挿入される行は、Insert 操作自体から取得されます。 Table Insert は物理操作です。
テーブルマージ演算子 Table Merge Table Merge 操作は、マージ データ ストリームをヒープに適用します。 演算子は、演算子の列で指定されたテーブル内の行を Argument 削除、更新、または挿入します。 実際に実行される操作は、演算子の列でArgument指定された ACTION 列の実行時値によって異なります。 Table Merge は物理操作です。
テーブル スキャン 操作アイコン Table Scan 演算子は Table Scan 、クエリ実行プランの列で Argument 指定されたテーブルからすべての行を取得します。 WHERE:() 述語が列に Argument 表示される場合は、述語を満たす行のみが返されます。 Table Scan は論理操作でもあり、物理操作でもあります。
テーブルスプール操作アイコン Table Spool Table Spool 操作は入力をスキャンし、隠しスプール テーブルに各行のコピーを格納します。この隠しスプール テーブルは tempdb データベースに格納され、クエリの有効期間だけ存在します。 演算子が再巻き戻され (たとえば、演算子によって Nested Loops ) 再バインドが必要ない場合は、入力を再スキャンする代わりにスプール・データが使用されます。 Table Spool は物理操作です。
テーブル更新操作アイコン Table Update 物理オペレーターは Table Update 、クエリ実行プランの列で指定されたテーブル内 Argument の入力行を更新します。 SET:() 述語によって、更新された各列の値が決定されます。 これらの値は、SET 句、またはこの操作内かこのクエリ内で参照されることがあります。
テーブル値関数演算子アイコン Table-valued Function Table-valued Function 演算子は、テーブル値関数 (Transact-SQL または CLR) を評価し、結果の行を tempdb データベースに格納します。 親反復子が行を要求すると、 Table 値関数は から 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 操作は、入力をスキャンし、並べ替え順に基づいて、指定した最初の数または最初の比率の行だけを返します。 列には Argument 、タイのチェック対象の列の一覧を含めることができます。 Top 操作は、更新プランで行数制限を行うときに使用します。 Top は論理操作でもあり、物理操作でもあります。 Top は論理操作でもあり、物理操作でもあります。
なし Top N Sort 上位 N の並べ替えは 反復子に Sort 似ていますが、最初の N 行のみが必要であり、結果セット全体は必要ありません。 Nの値が小さい場合、 SQL Server のクエリ実行エンジンは、メモリ内全体の並べ替え操作を実行しようとします。 Nの値が大きい場合、クエリ実行エンジンは、 N をパラメーターとしない、より汎用的な並べ替え方法を使用します。
拡張演算子 (UDX) アイコン UDX 拡張操作 (UDX) には、 SQL Serverの数ある操作のうちの XQuery 操作と XPath 操作が実装されています。 すべての UDX 操作には、論理操作と物理操作の両方があります。

拡張操作 (UDX) FOR XML は、単一出力行の単一 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 、XML 型の modify() メソッドの XQuery 置換データ変更拡張機能の XML ノードを更新します。
なし Union (結合) Union 操作は、複数の入力をスキャンし、重複行を削除して、スキャンした各行を出力します。 Union は論理操作です。
Update (データベース エンジン) 操作アイコン Update 演算子は Update 、クエリ実行プランの列で指定されたオブジェクトの Argument 入力から各行を更新します。 Update は論理操作です。 物理操作には、Table UpdateIndex Update、および Clustered Index Update があります。
While language element icon While 演算子は While Transact-SQL while ループを実装します。 While は言語要素です
テーブルスプール操作アイコン Window Spool Window Spool 操作は、各行をその行に関連付けられたウィンドウを表す行セットに拡張します。 クエリでは、OVER 句でクエリの結果セット内のウィンドウを定義してから、ウィンドウ関数がウィンドウ内の各行の値を計算します。 Window Spool は論理操作でもあり、物理操作でもあります。