論理操作および物理操作のプラン表示演算子のリファレンス
適用対象: SQL Server
Azure SQL データベース
Azure SQL Managed Instance
演算子で、SQL Server でクエリやデータ操作言語 (DML) ステートメントを実行する方法を記述します。 クエリ オプティマイザーでは、操作を使用して、クエリで指定された結果を作成するクエリ プラン、または DML ステートメントで指定された操作を実行するクエリ プランが構築されます。 クエリ プランは、物理操作をツリー構成で表現したものです。 クエリ プランを表示するには、SET SHOWPLAN
ステートメント、SQL Server Management Studio のグラフィカル実行プラン オプション、または SQL Server Management Studio の Showplan イベント クラスを使用します。
操作は、論理操作と物理操作に分類されます。
論理演算子
論理操作は、ステートメントの処理に使用される関係代数操作を表します。 つまり、論理操作は、どのような操作を実行する必要があるかを、概念的に示します。
物理操作
物理操作では、論理操作によって示される操作が実装されます。 それぞれの物理操作は、操作を実行するオブジェクトまたはルーチンです。 たとえば、一部の物理操作は、テーブル、インデックス、またはビューから、列や行にアクセスします。 物理操作は、計算、集計、データ整合性チェック、結合などの他の操作を実行します。 物理操作には、それぞれ関連するコストがかかります。
物理操作では、初期化、データの収集が行われた後に終了されます。 具体的には、物理操作は次の 3 つのメソッド呼び出しに応答できます。
Open()
:Open()
メソッドは、物理操作自体を初期化し、必要なデータ構造を設定します。 物理操作は多数のOpen()
呼び出しを受け取る場合がありますが、通常は 1 つのみ受け取ります。GetRow()
:GetRow()
メソッドにより、物理操作がデータの最初の行または後続の行を取得します。 物理操作が受け取るGetRow()
呼び出しは、多数の場合もゼロの場合もあります。Close()
:Close()
メソッドにより、物理操作はクリーンアップ操作を実行し、物理操作自体がシャットダウンされます。 物理操作は 1 つのClose()
呼び出しのみを受け取りますが、Close()
呼び出しは常に保証されるとは限りません。
GetRow()
メソッドは 1 行のデータを返し、呼び出された回数は、グラフィカルおよび XML プラン表示によって生成されるプラン表示出力に ActualRows として表示されます。 これらの SET
オプションの詳細については、「SET STATISTICS PROFILE (Transact-SQL)」および「SET STATISTICS XML (Transact-SQL)」を参照してください。
プラン表示出力に表示される ActualRebinds および ActualRewinds の数は、Open()
メソッドが呼び出された回数を示します。 ネステッド ループ結合内部での操作でなければ、ActualRebinds は 1、ActualRewinds は 0 になります。 ループ結合内部での操作の場合、再バインドと巻き戻しの合計数は、結合外部で処理された行数に等しくなる必要があります。 再バインドとは、結合の変更された相関パラメーターと、内側部分の相関パラメーターの 1 つ以上を再評価する必要があることを意味します。 巻き戻しとは、変更された相関パラメーターを使用せず、前の内部の結果セットを再利用することを意味します。
ActualRebinds と ActualRewinds は、SET STATISTICS XML ON
およびグラフィカルなプラン表示を使用して生成された XML プラン表示出力に存在します。 これらは、Nonclustered Index Spool、Remote Query、Row Count Spool、Sort、Table Spool、および Table-valued Function の各操作に対してのみ作成されます。 また、ActualRebinds および ActualRewinds は、 Assert および Assert 操作と Filter 操作に対しても作成される場合があります。
ActualRebinds および ActualRewinds が XML プラン表示に存在する場合、これらの値が EstimateRebinds および EstimateRewindsに相当します。 存在しない場合、予測行数 (EstimateRows) が実際の行数 (ActualRows) に相当します。 実際のグラフィカルなプラン表示出力では、実際の再バインドと実際の巻き戻しが存在しない場合は、ゼロが表示されます。
関連するカウンターの ActualEndOfScans は、XML およびグラフィカルなプラン表示で使用できます。 物理操作がデータ ストリームの最後に達するたびに、このカウンターは 1 ずつ増加します。 物理操作がデータ ストリームの最後に達することのできる回数は、0 回、1 回、あるいは複数回です。 再バインドおよび巻き戻しと同様に、スキャン回数の終了は、ループ結合内部での操作の場合のみ 2 回以上になります。 スキャン回数の終了は、再バインドおよび巻き戻しの合計数以下になる必要があります。
物理操作と論理操作をマップする
クエリ オプティマイザーでは、ツリー構成の論理操作としてクエリ プランが作成されます。 クエリ オプティマイザーでは、プランが作成されると、各論理操作にとって最も効率的な物理操作が選択されます。 クエリ オプティマイザーでは、論理操作をどの物理操作から実装するかを判断するために、コストベースの手法が使用されます。
通常、複数の物理操作で 1 つの論理操作を実装できます。 ただし、めったにないケースですが、1 つの物理操作で複数の論理操作を実装することもできます。
バッチ モード実行
バッチ モード実行は、一度に 1 行ずつではなく、複数の行をまとめて処理するためのクエリ処理方法です (そのため、バッチという言葉が使われています)。 バッチ モード処理では、マルチコア CPU 向けに最適化されており、最新ハードウェアでメモリ スループットを上げるアルゴリズムが使用されています。 バッチ モードは、行ストア オブジェクトと列ストア オブジェクトの両方の操作セットで使用できます。 詳細については、「クエリ処理アーキテクチャ ガイド」を参照してください。
操作の説明
このセクションには、論理演算子と物理演算子の説明が含まれています。 SQL Server Management Studio (SSMS) と Azure Data Studio のクエリ プラン ビューの [Properties] ウインドウを使用して、クエリ プランと演算子のプロパティを表示できます。
ヒント
特定のグラフィカルな実行プランのアイコンに、右から左への矢印が 2 つある黄色い円が表示される場合は、演算子が並列で実行されます。 並列処理の詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」を参照してください。
アイコン | プラン表示操作 | 説明 |
---|---|---|
![]() |
適応型結合 | 適応型結合演算子を使うと、ハッシュ結合方法または入れ子になったループ結合方法のどちらを選ぶかを、最初の入力のスキャンが終わるまで遅らせることができます。 Adaptive Join は、物理操作です。 詳細については、「アダプティブ結合について」を参照してください。 |
![]() |
集計 | Aggregate 操作は、MIN 、MAX 、SUM 、COUNT 、または AVG のいずれかが含まれた式を計算します。Aggregate は論理操作でもあり、物理操作でもあります。 |
![]() |
Arithmetic Expression | Arithmetic Expression 操作は、行の既存の値から新しい値を計算します。 算術式 は、新しいバージョンの SQL Server では使用されません。 |
![]() |
Assert | Assert 操作は、状態の検証を行います。 たとえば、参照整合性の検証や、スカラー サブクエリによって 1 行返されることの確認を行います。 入力行ごとに、Assert 操作によって実行プランの [Properties] ウィンドウの式が評価されます。 この式が NULL であると評価されると、行は Assert 操作を通過して、クエリの実行が継続されます。 式が NULL 以外の値に評価されると、相応のエラーが発生します。Assert は物理操作です。 |
![]() |
割り当て | Assign 操作は、変数に式の値または定数値を代入します。 Assign は言語要素です。 |
なし | Async Concat | Async Concat 操作は、リモート クエリ (分散クエリ) でのみ使用されます。 Async Concat には n 個の子ノードと 1 個の親ノードが含まれます。 通常、子ノードのいくつかはリモート コンピューターで、分散クエリに参加しています。 Async Concat は、すべての子ノードに同時に Open() 呼び出しを行い、各子ノードにビットマップを適用します。 Async Concat では、1 に設定されているビットごとに、要求時に出力行が親ノードに送信されます。 |
![]() |
Bitmap | SQL Server では、Bitmap 操作で、並列クエリ プランにビットマップ フィルターを実装しています。 ビットマップ フィルターの利点は、クエリの実行速度が向上することです。行が他の操作 (Parallelism 操作など) に渡される前に、結合レコードの生成に関係しないキー値を持った行が排除されます。 ビットマップ フィルターは、操作ツリーの特定の部分にあるテーブルから得られた一連の値の圧縮表現を使用して、同じツリーの別の部分にある 2 つ目のテーブルから行を抽出します。 不要な行をクエリの初期段階で排除することにより、それ以降の操作に渡される行数が減り、その結果、クエリの全体的なパフォーマンスが向上します。 オプティマイザーは、どのような場合にビットマップの選択度が効果を期待できる程度に高くなるか、また、どのような操作にフィルターを適用すべきかを判断します。 Bitmap は物理操作です。 |
![]() |
Bitmap Create | Bitmap Create 操作は、ビットマップが作成されるプラン表示の出力に使用されます。 Bitmap Create は論理操作です。 |
なし | Branch Repartition | 並列クエリ プランでは、反復子に概念上の領域が存在する場合があります。 このような領域内にある反復子はすべて、並列スレッドにより実行できます。 領域自体は、順次実行される必要があります。 個別の領域内の Parallelism 反復子のいくつかは、 Branch Repartitionと呼ばれます。 このような 2 つの領域間の境界にある Parallelism 反復子は、 Segment Repartitionと呼ばれます。 Branch Repartition と Segment Repartition は論理操作です。 |
![]() |
Broadcast | Broadcast には、1 つの子ノードと n 個の親ノードがあります。 Broadcast では、要求時に複数のコンシューマーに入力行が送信されます。 各コンシューマーがすべての行を取得します。 たとえば、すべてのコンシューマーがハッシュ結合のビルド側の場合、ハッシュ テーブルの n 個のコピーがビルドされます。 |
![]() |
Build Hash | メモリ最適化列ストア インデックスのバッチ ハッシュ テーブルの作成を示します。 適用対象: SQL Server 2012 (11.x) のみ。 |
![]() |
Clustered Index Delete | Clustered Index Delete 操作は、グラフィカルおよび XML プラン表示の [Properties] ウィンドウに表示されている [Object] プロパティで指定されたクラスター化インデックスから行を削除します。 SeekPredicate または Predicate が存在する場合、述語を満たす行のみが削除されます。 注: クラスター化インデックスに対する変更により、非クラスター化インデックスに影響がでる可能性があります。 Clustered Index Delete は物理操作です。 |
![]() |
Clustered Index Insert | Clustered Index Insert 操作は、グラフィカルおよび XML プラン表示の [Properties] ペインに表示される [Object] プロパティで指定されたクラスター化インデックスに、入力から行を挿入します。 XML プラン表示には、[SetPredicate] プロパティと [ColumnReference] プロパティが含まれており、このプロパティを使用して、各列が設定される値を決定できます。 Clustered Index Insert に挿入値の子がない場合、挿入される行は挿入操作自体から取得されます。 注: クラスター化インデックスに対する変更により、非クラスター化インデックスに影響がでる可能性があります。 Clustered Index Insert は物理操作です。 |
![]() |
Clustered Index Merge | Clustered Index Merge 操作は、マージ データ ストリームをクラスター化インデックスに適用します。 操作は、グラフィカルおよび XML プラン表示の [Properties] ウインドウに表示される [Object] プロパティで指定されたクラスター化インデックスに、入力から行を挿入します。 実際に実行される操作は、[ActionColumn] プロパティのランタイム値によって異なります。 注: クラスター化インデックスに対する変更により、非クラスター化インデックスに影響がでる可能性があります。 Clustered Index Merge は物理操作です。 |
![]() |
Clustered Index Scan | Clustered Index Scan 操作は、グラフィカルおよび XML プラン表示の [Properties] ウィンドウに表示される [Object] プロパティで指定されたクラスター化インデックスに、入力から行をスキャンします。 オプションの [Predicate] がある場合、この述語に適合する行だけが返されます。 [Properties] ウィンドウまたは XML プラン表示の [Ordered] プロパティが True の場合、クエリ プロセッサは、クラスター化インデックスが並べ替えた順序で行を返す必要があると判断されます。 [Ordered] プロパティが False の場合、データベース エンジンは、必ずしも出力を並べ替えることなく、最適な方法でインデックスをスキャンします。 Clustered Index Scan は論理操作でもあり、物理操作でもあります。 |
![]() |
Clustered Index Seek | Clustered Index Seek 操作は、インデックスのシーク機能を使用してクラスター化インデックスから行を取得します。 グラフィカルおよび XML プラン表示の [Properties] ウインドウに表示される [Object] プロパティには、使用されているクラスター化インデックスの名前が含まれます。 SeekPredicate には、シークの述語が含まれています。 データベース エンジンはインデックスを使用して、 SeekPredicate 述語に適合する行だけを処理します。 また、データベース エンジンが SeekPredicate を満たすすべての行に対して評価する [Predicate] プロパティを含めることもできますが、これはオプションであり、このプロセスを完了するためにインデックスを使用しません。 [Properties] ウィンドウまたは XML プラン表示の [Ordered] プロパティが True の場合、クエリ プロセッサは、クラスター化インデックスが並べ替えた順序で行を返す必要があると判断されます。 [Ordered] プロパティが False の場合、データベース エンジンは、必ずしも出力を並べ替えることなく、最適な方法でインデックスを検索します。 出力に順序を保持するよう要求する場合、並べ替えられていない出力を生成する場合よりも効率が低下することがあります。 Clustered Index Seek は論理操作でもあり、物理操作でもあります。 |
![]() |
Clustered Index Update | Clustered Index Update 操作は、グラフィカルおよび XML プラン表示の [Properties] ペインに表示される [Object] プロパティで指定されたクラスター化インデックスに、入力から行を更新します。 [Predicate] プロパティが存在する場合、この述語を満たす行のみが更新されます。 [SetPredicate] プロパティがある場合、更新される各列がこの値に設定されます。 [DefineValue] プロパティがある場合、この操作によって定義される値が一覧表示されます。 これらの値は、SET 句、またはこの操作内かこのクエリ内で参照されることがあります。注: クラスター化インデックスに対する変更により、非クラスター化インデックスに影響がでる可能性があります。 Clustered Index Update は論理操作でもあり、物理操作でもあります。 |
![]() |
[折りたたみ] | Collapse 操作により、更新処理が最適化されます。 更新が実行されると、( Split 操作を使用して) 削除と挿入に分割されます。 [Properties] ウインドウには、キー列の一覧を指定する述語別のグループが含まれています。 クエリ プロセッサでは、同じキー値を削除して挿入する操作が隣接する行で検出されると、これらの個別の操作を 1 つのより効率的な更新操作に置き換えます。 Collapse は論理操作でもあり、物理操作でもあります。 |
![]() |
Columnstore Index Delete | Columnstore Index Delete 操作は、グラフィカルおよび XML プラン表示の [Properties] ウインドウペインに表示される [Object] プロパティで指定された列ストア インデックスへの入力からの行の削除を表します。 削除は、クラスター化列ストア インデックスの Clustered Index Delete と、非クラスター化列ストア インデックスの Index Delete 操作を使用して行われます。 インデックスの種類 (Clustered、NonClustered、または ViewNonClustered) は、XML プラン表示の [IndexKind] プロパティで指定されます。 SeekPredicate は、Columnstore Index Delete の削除ではサポートされていません。 削除する行は、子演算子から読み取られます。 Columnstore Index Delete は物理操作です。 |
![]() |
Columnstore Index Insert | Columnstore Index Insert 操作は、グラフィカルおよび XML プラン表示の [Properties] ウインドウペインに表示される Object プロパティで指定された列ストア インデックスへの入力からの行の挿入を表します。 挿入は、Clustered Index Insert の場合はクラスター化インデックス挿入操作を介して行われ、非クラスター化列ストア インデックスの場合はIndex Insert 操作を介して行われます。 インデックスの種類 (Clustered、NonClustered、または ViewNonClustered) は、XML プラン表示の [IndexKind] プロパティで指定されます。 XML プラン表示には、[SetPredicate] プロパティと [ColumnReference] プロパティが含まれており、このプロパティを使用して、各列が設定される値を決定できます。 注: クラスター化インデックスに対する変更により、非クラスター化インデックスに影響がでる可能性があります。 Columnstore Index Insert は物理操作です。 |
![]() |
Columnstore Index Merge | Columnstore Index Merge は、Clustered Index Merge 操作を使用したマージ データ ストリームのアプリケーションを表しています。 操作は、グラフィカルおよび XML プラン表示の [Properties] ウインドウにリストされている、[Object] プロパティで指定されたクラスター化列ストア インデックスから行を削除、更新、または挿入します。 実際に実行される操作は、[ActionColumn] プロパティのランタイム値によって異なります。 注: クラスター化インデックスに対する変更により、非クラスター化インデックスに影響がでる可能性があります。 Columnstore Index Merge は物理操作です。 |
![]() |
Columnstore インデックス スキャン | Columnstore Index Scan 操作は、[Object] プロパティで指定された列ストア インデックス内の行をスキャンし、グラフィカルおよび XML 表示プランの [Properties] ウインドウにリストされます。 スキャンは、クラスター化列ストア インデックスの Clustered Index Scan と、非クラスター化列ストア インデックスの Index Scan 操作を使用して実行されます。 インデックスの種類 (Clustered、NonClustered、または ViewNonClustered) は、XML プラン表示の [IndexKind] プロパティで指定されます。 オプションの [Predicate] がある場合、この述語に適合する行だけが返されます。 [SeekPredicate] プロパティは、パーティション分割された列ストア インデックスに対してのみ使用でき、等しい条件または等しくない条件でのみ使用できます。 パーティション化された列がクエリ述語内にある場合、パーティションを削除すると、スキャンする行グループの数を減らすことができます。 Columnstore Index Scan は物理操作です。 |
![]() |
Columnstore Index Update | Columnstore Index Update 操作は、[Object] プロパティで指定された列ストア インデックス内の 1 つ以上の行の更新を表し、グラフィカルおよび XML 表示プランの [Properties] ウィンドウにリストされます。 更新は、Clustered Index Update 操作の場合はクラスター化インデックス更新操作を介して、非クラスター化列ストア インデックスの場合は Index Update 操作を介して行われます。 インデックスの種類 (Clustered、NonClustered、または ViewNonClustered) は、XML プラン表示の [IndexKind] プロパティで指定されます。 SeekPredicate は、Columnstore Index Update ではサポートされていません。 更新する行は、子演算子から読み取られ更新されます。 [SetPredicate] プロパティがある場合、更新される各列がこの値に設定されます。 [DefineValue] プロパティがある場合、この操作によって定義される値が一覧表示されます。 これらの値は、SET 句、またはこの操作内かこのクエリ内で参照されることがあります。注: クラスター化インデックスに対する変更により、非クラスター化インデックスに影響がでる可能性があります。 Columnstore Index Update は物理操作です。 |
![]() |
Compute Scalar | Compute Scalar 操作は、計算されたスカラー値を作成する式を評価します。 この値は、ユーザー、クエリの参照先、またはその両方に返されることがあります。 両方に返される例としては、フィルター述語や結合述語があります。SET STATISTICS XML により生成されたプラン表示に表示されるCompute Scalar 操作に、 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 は論理操作でもあり、物理操作でもあります。 |
![]() |
条件付き (If と While) | Conditional 操作では、IF または WHILE ループに基づく条件処理を実行します。 If および While は言語要素です。 |
![]() |
Constant Scan | Constant Scan 操作は、1 つ以上の定数行をクエリに導入します。 多くの場合、 Compute Scalar 操作は、 Constant Scan 操作によって生成された行に列を追加するために、 Constant Scan の後で使用されます。 定数スキャン では、0 個以上の列を持つ 1 つ以上の行を生成できます。 |
![]() |
CONVERT | Convert 操作は、スカラー データ型間の変換を行います。 Convert は言語要素です。 |
![]() |
Cross Join | Cross Join 操作は、最初 (上部) の入力の各行と 2 番目 (下部) の入力の各行を結合します。 Cross Join は論理操作です。 |
![]() |
カーソル | カーソル 論理操作および物理操作は、カーソル操作に関するクエリまたは更新処理がどのように実行されたかを示すために使用されます。 カーソル物理操作は、キーセット ドリブン カーソルの使用など、カーソルの処理に使用される物理的な実装アルゴリズムを示します。 カーソル実行の各ステップは、物理操作に関係します。 カーソル論理操作は、カーソルが読み取り専用であるなどの、カーソルのプロパティを示します。 論理操作には、Asynchronous、Optimistic、Primary、Read Only、Scroll Locks、Secondary、および Synchronous があります。 物理操作には、Dynamic、Fetch Query、Keyset、Population Query、Refresh Query、および Snapshot があります。 |
![]() |
Declare | Declare 操作はクエリ プランにローカル変数を割り当てます。 Declare は言語要素です。 |
![]() |
削除 | Delete 操作は、[Properties] ウインドウのオプションの述語を満たす行を (オブジェクトから) 削除します。 |
![]() |
Deleted Scan | トリガーでは、Deleted Scan 操作が削除されたテーブルをスキャンします。 |
なし | Distinct | Distinct 操作は、行セットや値のコレクションから重複部分を削除します。 Distinct は論理操作です。 |
なし | Distinct Sort | Distinct Sort 論理操作は入力をスキャンし、重複部分を削除し、[Properties] ウィンドウの述語に指定された列を基準に並べ替えます。 Distinct Sort は論理操作です。 |
![]() |
Distribute Streams | Distribute Streams 操作は、並列クエリ プランのみで使用されます。 Distribute Streams 操作は、レコードの 1 つの入力ストリームを使用して複数の出力ストリームを生成します。 レコードの内容と形式は変更されません。 入力ストリームの各レコードは、出力ストリームのいずれかに含まれます。 この操作では、出力ストリーム内で入力レコードの相対順序が自動的に保持されます。 通常、特定の入力レコードが属する出力ストリームを判断するにはハッシュ操作が使用されます。 出力をパーティション分割した後、[Properties] ウインドウに partition columns 述語とパーティション列が設定されます。 Distribute Streams は論理操作です。 |
![]() |
動的 | Dynamic 操作は、他のユーザーによる変更をすべて表示できるカーソルを使用します。 |
![]() |
Eager Spool | Eager Spool 操作は、入力全体を使用し、 tempdb データベースに格納されている一時隠しオブジェクトに各行を格納します。 この操作が再度使用され ( Nested Loops 操作で使用される場合など)、再バインドが不要な場合は、入力を再スキャンする代わりにスプールされたデータが使用されます。 再バインドが必要な場合は、スプールされたデータが破棄され、(再バインドされる) 入力の再スキャンによりスプール オブジェクトが再構築されます。 Eager Spool 操作では、操作のスプール ファイルが "集中的" に構築されます。たとえば、スプールの親操作によって最初の行が要求されると、スプール操作によって入力操作からのすべての行が使用され、それらの行がスプールに格納されます。 Eager Spool は論理操作です。 |
![]() |
Fetch Query | Fetch Query 操作は、カーソルに対してフェッチが実行されたときに行を取得します。 |
![]() |
Assert | Filter 操作は、入力をスキャンし、Properties 列にあるフィルター式 (述語) に適合する行だけを返します。 |
なし | Flow Distinct | Flow Distinct 操作は入力をスキャンし、重複部分を削除します。 Distinct 操作はすべての入力を取得してから出力を行いますが、Flow Distinct 操作は入力から各行を取得するたびに行を返します。ただし、行が重複する場合は破棄されます。 Flow Distinct は論理操作です。 |
![]() |
Foreign Key References Check | Foreign Key References Check 操作は、変更された行を参照テーブルの行と比較して、変更によって参照整合性が損なわれないことを確認することで、参照整合性チェックを適切に実行します。 Foreign Key References Check 操作は、同じプライマリ キーまたは一意のキーに 253 を超える外部キー参照が存在する場合に使用されます。 Foreign Key References Check は論理操作でもあり、物理操作でもあります。 |
![]() |
Full Outer Join | Full Outer Join 論理操作は、最初 (上部) の入力で結合述語に適合し、2 番目 (下部) の入力の各行と結合された各行を返します。 また、以下の行も返します。 - 2 番目の入力に一致する行がない最初の入力の行。 - 最初の入力に一致する行がない 2 番目の入力の行。 一致する値がない入力は NULL 値として返されます。 Full Outer Join は論理操作です。 |
![]() |
Gather Streams | Gather Streams 操作は、並列クエリ プランでのみ使用されます。 Gather Streams 操作は複数の入力ストリームを使用し、入力ストリームを組み合わせてレコードの単一出力ストリームを作成します。 レコードの内容と形式は変更されません。 この操作で順序を保持する場合は、すべての入力ストリームが並べ替えられている必要があります。 出力を並べ替える場合、[Properties] ウインドウには order by 述語および並べ替える列の名前が表示されます。 Gather Streams は論理操作です。 |
![]() |
Hash Match | Hash Match 操作は、ビルド入力の行ごとにハッシュ値を計算してハッシュ テーブルを作成します。 [Properties] ウインドウに、ハッシュ値の作成に使用される列リストが指定された hash 述語が入ります。 次に、該当するプローブ行ごとに同じハッシュ関数を使用してハッシュ値が計算され、ハッシュ テーブル内で一致検索が行われます。 残余述語がある場合 ([Properties] ウインドウ内の RESIDUAL:() で特定できます)、行が一致すると見なすには、その残余述語の条件も満たす必要があります。 動作は、次に示すように、実行している論理操作によって異なります。- すべての結合では、最初 (上部) の入力を使用してハッシュ テーブルを作成し、2 番目 (下部) の入力を使用してハッシュ テーブルを探索します。 出力は、結合の種類で指定されているとおりに一致します (または一致しません)。 複数の結合が同じ結合列を使用する場合、これらの操作はハッシュ チームにグループ化されます。 - Distinct 操作または Aggregate 操作の場合、入力を使用してハッシュ テーブルを作成します (重複部分を削除し、集計式を計算します)。 ハッシュ テーブルを作成したら、テーブルをスキャンしすべてのエントリを出力します。 - Union 操作の場合、最初の入力を使用してハッシュ テーブルを作成します (重複部分は削除します)。 2 番目の入力 (重複部分はありません) を使用して、ハッシュ テーブルを探索して一致しないすべての行を返します。次に、ハッシュ テーブルをスキャンし、すべてのエントリを返します。 Hash Match は物理操作です。 詳細については、「ハッシュ結合について」を参照してください。 |
![]() |
インデックス削除 | Index Delete 操作は、[Properties] ウインドウで指定された非クラスター化インデックスから行を削除します。 Index Delete は物理操作です。 |
![]() |
Index Insert | Index Insert 操作は、Properties ウィンドウに指定された非クラスター化インデックスに入力からの行を挿入します。 [プロパティ] ペインには、各列に設定される値を示す set 述語も含まれています。 Index Insert は物理操作です。 |
![]() |
Index Scan | Index Scan 操作は、[Properties] ウィンドウに指定された非クラスター化インデックスからすべての行を取得します。 [Properties] ウインドウにオプションの where 述語がある場合、述語に適合する行だけが返されます。 Index Scan は論理操作でもあり、物理操作でもあります。 |
![]() |
Index Seek | Index Seek 操作は、インデックスのシーク機能を使用して非クラスター化インデックスから行を取得します。 [Properties] ウインドウには、使用される非クラスター化インデックスの名前が含まれます。 また、seek 述語も含まれます。 データベース エンジンはインデックスを使用して、seek 述語に適合する行だけを処理します。 必要に応じて、この列には where 述語が含まれることがあります。この述語は、ストレージ エンジンによって seek 述語に適合するすべての行に対して評価されます (この処理を行うのにインデックスは使用されません)。 [Properties] ウィンドウに ORDERED 句が含まれていると、クエリ プロセッサでは行を非クラスター化インデックスの並べ替え順で返す必要があると判断します。 ORDERED 句がない場合は、データベース エンジンにより、最適な方法でインデックスが検索されます (出力が並べ替えられるとは限りません)。 出力で行の順序を保持する場合、並べ替えられていない出力に比べて効率が低下することがあります。Index Seek は論理操作でもあり、物理操作でもあります。 |
![]() |
Index Spool | Index Spool 操作には、[プロパティ] ウィンドウに seek 述語が含まれています。 Index Spool 操作では入力行をスキャンし、隠しスプール ファイル ( tempdb データベースに格納され、クエリの有効期間内のみ存在します) に各行のコピーを格納して、行に非クラスター化インデックスを作成します。 さらに、インデックスのシーク機能を使用して、seek 述語に適合する行だけを出力します。 この操作が再度使用され ( Nested Loops 操作で使用される場合など)、再バインドが不要な場合は、入力を再スキャンする代わりにスプールされたデータが使用されます。 Index Spool は物理操作です。 |
![]() |
Index Update | Index Update 物理操作は、[Properties] ウインドウに指定された非クラスター化インデックスの入力に基づいて行を更新します。 set 述語がある場合、更新される各列がこの値に設定されます。 Index Update は物理操作です。 |
![]() |
Inner Join | Inner Join 論理操作は、最初 (上部) の入力と 2 番目 (下部) の入力の結合述語に適合する各行を返します。 Inner Join は論理操作です。 |
![]() |
[挿入] | Insert 操作は、[Properties] ウインドウに指定されたオブジェクトに入力から各行を挿入します。 物理操作は、 Table Insert操作、 Index Insert操作、または Clustered Index Insert 操作のいずれかです。 Insert は論理操作です。 |
![]() |
Inserted Scan | トリガーで Inserted Scan 操作は、 inserted テーブルをスキャンします。 Inserted Scan 操作は論理操作でもあり、物理操作でもあります。 |
![]() |
Intrinsic | Intrinsic 演算子では、内部の Transact-SQL 関数が呼び出されます。 Intrinsic は言語要素です。 |
![]() |
Iterator | Iterator 汎用アイコンは、グラフィカルなプラン表示を生成するロジックで、反復子に適したアイコンが見つからない場合に表示されます。 汎用アイコンは、必ずしもエラー状態を示しているわけではありません。 |
![]() |
Key Lookup | Key Lookup 操作は、クラスター化インデックス付きテーブルでのブックマーク参照です。 [Properties] ウインドウには、クラスター化インデックスの名前、およびクラスター化インデックスで行の参照に使用されるクラスター化キーが格納されます。 Key Lookup は、常に Nested Loops 操作を伴います。 [Properties] ウインドウに WITH PREFETCH 句がある場合、クエリ プロセッサでは、クラスター化インデックスのブックマークを参照する最適な方法として、非同期プリフェッチ (先読みり) が使用されます。クエリ プランで Key Lookup 操作を使用することは、パフォーマンスのチューニングによってクエリ パフォーマンスが向上する可能性があることを示します。 たとえば、カバリング インデックスを追加することにより、クエリ パフォーマンスが向上する場合があります。 |
![]() |
Keyset | Keyset 操作では、カーソルを使用して更新内容を参照できます。ただし、他のユーザーが挿入した内容は参照できません。 |
![]() |
Language 要素 | Language Element 汎用アイコンは、グラフィカルなプラン表示を生成するロジックで、反復子に適したアイコンが見つからない場合に表示されます。 汎用アイコンは、必ずしもエラー状態を示しているわけではありません。 |
![]() |
Lazy Spool | Lazy Spool 論理操作では、 tempdb データベースに格納された非表示の一時オブジェクトに入力からの各行を格納します。 この操作が再度使用され ( Nested Loops 操作で使用される場合など)、再バインドが不要な場合は、入力を再スキャンする代わりにスプールされたデータが使用されます。 再バインドが必要な場合は、スプールされたデータが破棄され、(再バインドされる) 入力の再スキャンによりスプール オブジェクトが再構築されます。 Lazy Spool 操作のスプール ファイルは "レイジー" 手法で構築されます。つまり、1 回にすべての行を処理するのではなく、スプールの親操作から行が要求されるたびに入力操作から行を取得し、その行をスプールに格納します。 Lazy Spool は論理操作です。 |
なし | Left Anti Semi Join | Left Anti Semi Join 操作は、最初 (上部) の入力の中に 2 番目 (下部) の入力に一致する行がない場合に該当する行を返します。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。 Left Anti Semi Join は論理操作です。 |
なし | Left Outer Join | Left Outer Join 操作は、最初 (上部) の入力と 2 番目 (下部) の入力の結合述語に適合する各行を返します。 また、2 番目入力で一致する列がない最初の入力列を返します。 2 番めの一致しない列が null 値として返されます。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。 Left Outer Join は論理操作です。 |
なし | Left Semi Join | Left Semi Join 操作は、最初 (上部) の入力の中に 2 番目 (下部) の入力に一致する行がある場合に該当する行を返します。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。 Left Semi Join は論理操作です。 |
![]() |
Log Row Scan | Log Row Scan 操作は、トランザクション ログをスキャンします。 Log Row Scan は論理操作でもあり、物理操作でもあります。 |
![]() |
Merge Interval | Merge Interval 操作は、重複している可能性のある複数の間隔をマージして、重複しない最小限の間隔を作成します。この間隔は、インデックス エントリのシークに使用されます。 通常、この操作は、Constant Scan 操作上にある 1 つ以上前の Compute Scalar 操作上にあり、Compute Scalar 操作は、Merge Interval 操作がマージする間隔 (1 行の中の列として表されます) を構築します。 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 の各論理操作を実行します。 [Properties] ウィンドウの Merge Join 操作には、この操作によって一対多の結合が実行されている場合は merge 述語が、多対多の結合が実行されている場合は many-to-many merge 述語が含まれています。 また、[Properties] ウインドウには、操作の実行に使用される列のコンマ区切りリストも設定されます。 Merge Join 操作には、それぞれの列を基準に並べ替えられた 2 つの入力が必要です。この並べ替えを行うときは、クエリ プランに明示的な並べ替え操作を挿入することが可能です。 明示的な並べ替えが必要でない場合、Merge Join 操作は特に効果的です。たとえば、データベースに適切な B ツリー インデックスがある場合、またはマージ結合とロール アップを含むグループ化など、複数の操作で並べ替え順序を利用できる場合などです。 Merge Join は物理操作です。 詳細については、「マージ結合について」を参照してください。 |
![]() |
Nested Loops | Nested Loops 操作は、内部結合、左外部結合、左半結合、左反半結合の各論理操作を実行します。 ネステッド ループ結合では、外部テーブルの行ごとに内部テーブルが検索されます。検索には、通常はインデックスが使用されます。 クエリ プロセッサにより、予想コストに基づいて、内部入力でインデックスを検索する場所の絞り込みを向上するために、外部入力を並べ替えるかどうかが判断されます。 実行される論理操作に基づいて、[Properties] ウィンドウの述語 (省略可能) に適合するすべての行が、該当する行として返されます。 最適化された OPTIMIZED 属性が True に設定されている場合、最適化された Nested Loop (または一括並べ替え) が使用されることを意味します。Nested Loops は物理操作です。 詳細については、「入れ子になっているループ結合について」を参照してください。 |
なし | Online Index Insert | Online Index Insert 操作は、インデックスの操作 (作成、変更 および削除) がオンラインで実行されることを示します。 つまり、インデックス操作の実行中に、基になるテーブル データをユーザーが利用することができます。 Online Index Insert は物理操作です。 |
なし | 並列処理 | Parallelism 操作 (または交換反復子) は、Distribute Streams、Gather Streams、および Repartition Streams の各論理操作を実行します。 [Properties] ウインドウには、パーティション分割される列のコンマ区切りのリストを指定した partition columns 述語を含めることができます。 [Properties] ウインドウには、パーティション分割中に並べ替え順序を保持する列のリストを指定した order by 述語も含めることができます。 注: クエリが並列クエリとしてコンパイルされていても、実行時に直列クエリとして実行されると、SQL Server Management Studio または SQL Server Management Studio の [実際の実行プランを含める] オプションを使用して SET STATISTICS XML によって生成されたプラン表示出力には、Parallelism 操作の RunTimeInformation 要素は含まれません。 SET STATISTICS PROFILE の出力では、Parallelism 操作に対する実際の行数および実際の実行回数としてゼロが表示されます。 いずれの状況が発生した場合も、 Parallelism 操作が実行時のクエリ プランではなく、クエリのコンパイル中にのみ使用されたことを示します。 サーバー上での同時実行の負荷が高い場合は、並列クエリ プランが直列に実行されることがあります。Parallelism は物理操作です。 Parallelism 操作に関する詳細については、「並列処理操作」を参照してください。 |
![]() |
Parameter Table Scan | Parameter Table Scan 操作により、現在のクエリのパラメーターとして機能しているテーブルをスキャンします。 通常、この操作は、ストアド プロシージャ内の INSERT クエリに対して使用されます。Parameter Table Scan は論理操作でもあり、物理操作でもあります。 |
なし | Partial Aggregate | Partial Aggregate は、並列プランで使用されます。 ディスクへの書き込み ("スピル" と呼ばれます) が必要にならないように、できるだけ多くの入力行に集計関数が適用されます。 Hash Match は、パーティション集計を実装する唯一の物理操作 (反復子) です。 Partial Aggregate は論理操作です。 |
![]() |
Population Query | Population Query 操作によって、カーソルが開かれたときにカーソルの作業テーブルを作成します。 |
![]() |
Refresh Query | Refresh Query 操作は、フェッチ バッファーから行の現在のデータをフェッチします。 |
![]() |
Remote Delete | Remote Delete 操作は、リモート オブジェクトから入力行を削除します。 Remote Delete は論理操作でもあり、物理操作でもあります。 |
![]() |
Remote Index Scan | Remote Index Scan 操作は、[Properties] ウインドウに指定されたリモート インデックスをスキャンします。 Remote Index Scan は論理操作でもあり、物理操作でもあります。 |
![]() |
Remote Index Seek | Remote Index Seek 操作は、リモート インデックス オブジェクトのシーク機能を使用して行を取得します。 [Properties] ウインドウには、使用されているリモート インデックスの名前と seek 述語が含まれます。 Remote Index Seek は論理操作であり、物理操作でもあります。 |
![]() |
Remote Insert | Remote Insert 操作では、入力行がリモート オブジェクトに挿入されます。 Remote Insert は論理操作でもあり、物理操作でもあります。 |
![]() |
リモート クエリ | Remote Query 操作では、リモート ソースにクエリを送信します。 リモート サーバーに送信されるクエリのテキストは [Properties] ウインドウにあります。 Remote Query は論理操作でもあり、物理操作でもあります。 |
![]() |
Remote Scan | Remote Scan 操作は、リモート オブジェクトをスキャンします。 リモート オブジェクトの名前が [Properties] ウィンドウに表示されます。 Remote Scan は論理操作でもあり、物理操作でもあります。 |
![]() |
Remote Update | Remote Update 操作は、リモート オブジェクトの入力行を更新します。 Remote Update は論理操作でもあり、物理操作でもあります。 |
![]() |
Repartition Streams | Repartition Streams 操作 (または交換反復子) では、複数のストリームを使用して、複数のレコード ストリームが生成されます。 レコードの内容と形式は変更されません。 クエリ オプティマイザーでビットマップ フィルターが使用される場合は、出力ストリームの行数が少なくなります。 入力ストリームの各レコードは、1 つの出力ストリームに配置されます。 この操作で順序を保持する場合、すべての入力ストリームが並べ替えられ、いくつかの並べ替え済みの出力ストリームにマージされる必要があります。 出力をパーティション分割する場合、[Properties] ウインドウに partition columns 述語とパーティション列が設定されます。 出力を並べ替える場合、[Properties] ウインドウには order by 述語および並べ替える列が表示されます。 この操作は、並列クエリ プランのみで使用されます。 Repartition Streams は論理操作です。 |
![]() |
結果 | Result 操作は、クエリ プランの最後に返されるデータです。 これは通常、プラン表示のルート要素です。 Result は言語要素です。 |
![]() |
RID Lookup | RID Lookup は、指定された行識別子 (RID) を使用する、ヒープ上のブックマーク参照です。 [Properties] ウィンドウには、テーブル内の行を検索するために使用されるブックマーク ラベルや、行が検索されるテーブルの名前が含まれます。 RID Lookup は、常に NESTED LOOP JOIN を伴います。RID Lookup は物理操作です。 ブックマーク参照の詳細については、「コミット済みの読み取りとブックマークの参照」を参照してください。 |
なし | Right Anti Semi Join | Right Anti Semi Join 操作は、2 番目 (下部) の入力の中で最初 (上部) の入力に一致する行がない各行を出力します。 一致行は、[Properties] ウィンドウの述語に適合する行として定義されます。述語がない場合は、各行が一致行になります。 Right Anti Semi Join は論理操作です。 |
なし | Right Outer Join | Right Outer Join 操作は、2 番目 (下部) の入力と最初 (上部) の入力の一致行との結合に適合する各行を返します。 また、2 番目の入力に最初の入力に一致する行がない場合は、2 番目の入力が NULL と結合された行も返します。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。Right Outer Join は論理操作です。 |
なし | Right Semi Join | Right Semi Join 操作は、2 番目 (下部) の入力の中に最初 (上部) の入力と一致する行があれば、該当する行を返します。 [プロパティ] ウィンドウに結合述語がない場合は、各行が一致する行になります。 Right Semi Join は論理操作です。 |
![]() |
Row Count Spool | Row Count Spool 操作では入力がスキャンされて存在する行数がカウントされ、同数の行がデータなしで返されます。 この操作は、行に含まれているデータではなく、行の存在チェックが重要な場合に使用されます。 たとえば、Nested Loops 操作で左半結合操作が実行され、結合述語が内部入力に適用される場合、Nested Loops 操作の内部入力の上に Row Count Spool が配置されることがあります。 その後、Nested Loops 操作では、Row Count Spool 操作から出力される行数が特定され (内部からの実際のデータは必要ないため)、外部行を返すかどうかが判断されます。 Row Count Spool は物理操作です。 |
なし | Segment Repartition | 並列クエリ プランでは、反復子に概念上の領域が存在する場合があります。 このような領域内にある反復子はすべて、並列スレッドにより実行できます。 領域自体は、順次実行される必要があります。 個別の領域内の Parallelism 反復子のいくつかは、 Branch Repartitionと呼ばれます。 このような 2 つの領域間の境界にある Parallelism 反復子は、 Segment Repartitionと呼ばれます。 Branch Repartition と Segment Repartition は論理操作です。 |
![]() |
Segment | Segment 操作は、1 つまたは複数の列の値に基づいて入力セットをセグメントに分割します。 これらの列は、 Segment 操作に引数として表示されます。 この操作では、セグメントは 1 つずつ出力されます。 Segment は論理操作であり、物理操作でもあります。 |
![]() |
Sequence Project | Sequence Project 操作は、列を追加し、順序付けされたセットに対する計算を実行します。 この操作は、1 つまたは複数の列の値に基づいて入力セットをセグメントに分割します。 この操作では、セグメントは 1 つずつ出力されます。 これらの列は、 Sequence Project 操作の引数として表示されます。 Sequence Project は論理操作でもあり、物理操作でもあります。 |
![]() |
Sequence | Sequence 操作によって、広範な更新プランを実行します。 機能的には、各入力を順次 (上から下へ) 実行します。 通常、各入力は異なるオブジェクトの更新です。 最後の (下部の) 入力からの行のみを返します。 Sequence は論理操作でもあり、物理操作でもあります。 |
![]() |
スナップショット | Snapshot 操作は、他のユーザーによる変更を表示しないカーソルを作成します。 |
![]() |
Sort | Sort 操作は、すべての入力行を並べ替えます。 [Properties] ウィンドウには、この操作によって重複が削除される場合は distinct order by 述語が含まれ、それ以外の場合は order by 述語が含まれます。これらの述語では、並べ替える列の一覧がコンマで区切って指定されています。 列を昇順に並べ替える場合は、列名の前に値 ASC が付きます。降順に並べ替える場合は、列名の前に値 DESC が付きます。Sort は論理操作でもあり、物理操作でもあります。 |
![]() |
分割 | Split 操作は、更新処理を最適化する場合に使用します。 この操作により、各更新操作が削除操作と挿入操作に分割されます。 Split 操作は論理操作でもあり、物理操作でもあります。 |
![]() |
Spool | 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 | Switch は、 n 個の入力を取得する特殊な連結反復子です。 個々の Switch 操作には式が 1 つ関連付けられます。 Switch操作は式の戻り値 (0 から n -1 までの範囲) に応じて、適切な入力ストリームを出力ストリームにコピーします。 Switch 操作の用途の 1 つは、高速順方向専用カーソルを使用するクエリ プランに TOP などの特定の操作を実装することです。 Switch は論理操作であり、物理操作でもあります。 |
![]() |
Table Delete | Table Delete 操作は、クエリ実行プランの [Properties] ウインドウで指定されているテーブルから行を削除します。 Table Delete は物理操作です。 |
![]() |
Table Insert | Table Insert 操作では、クエリ実行プランの Properties 列で指定したテーブルに、入力からの行が挿入されます。 [プロパティ] ペインには、各列に設定される値を示す set 述語も含まれています。 Table Insert に挿入値の子がない場合、挿入される行は、Insert 操作自体から取得されます。 Table Insert は物理操作です。 |
![]() |
Table Merge | Table Merge 操作は、マージ データ ストリームをヒープに適用します。 この操作は、操作の [Properties] ウィンドウで指定されているテーブル内の行を削除、更新、または挿入します。 実際に実行される操作は、[ActionColumn] プロパティのランタイム値によって異なります Table Merge は物理操作です。 |
![]() |
Table Scan | Table Scan 操作は、クエリ実行プランの [Properties] ウィンドウで指定されているテーブルからすべての行を取得します。 [Properties] ウインドウで、where 述語がある場合、述語に適合する行だけが返されます。 Table Scan は論理操作でもあり、物理操作でもあります。 |
![]() |
Table Spool | Table Spool 操作は入力をスキャンし、隠しスプール テーブルに各行のコピーを格納します。この隠しスプール テーブルは tempdb データベースに格納され、クエリの有効期間だけ存在します。 この操作が再度使用され ( Nested Loops 操作で使用される場合など)、再バインドが不要な場合は、入力を再スキャンする代わりにスプールされたデータが使用されます。 Table Spool は物理操作です。 |
![]() |
Table Update | Table Update 操作は、クエリ実行プランの [Properties] ウインドウで指定されているテーブルの入力行を更新します。 set 述語によって、更新された各列の値が決定されます。 これらの値は、SET 句、またはこの操作内かこのクエリ内で参照されることがあります。Table Update は物理操作です。 |
![]() |
Table-valued Function | テーブル値関数演算子はテーブル値関数 (Transact-SQL または CLR) を評価し、結果の行を tempdb データベースに格納します。 親反復子により行が要求されると、 Table-valued Function は 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 は論理操作でもあり、物理操作でもあります。 |
なし | Top N Sort | Top N Sort は、結果セット全体ではなく最初の N 行のみを必要とする点を除いては、 Sort 反復子と類似しています。 N の値が小さい場合、SQL Server のクエリ実行エンジンは、メモリ内全体の並べ替え操作を実行しようとします。 Nの値が大きい場合、クエリ実行エンジンは、 N をパラメーターとしない、より汎用的な並べ替え方法を使用します。 |
![]() |
UDX | 拡張操作 (UDX) は、SQL Server の数ある操作のうちの XQuery 操作と XPath 操作の一つを実装します。 - 拡張操作 (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 ノードを更新します。UDX 操作には、論理操作と物理操作の両方があります。 |
![]() |
Union (結合) | Union 操作は、複数の入力をスキャンし、重複行を削除して、スキャンした各行を出力します。 Union は論理操作です。 |
![]() |
更新プログラム | Update 操作は、クエリ実行プランの [Properties] ウィンドウで指定されているオブジェクトの入力の各行を更新します。 Update は論理操作です。 物理操作には、 Table Update、 Index Update、および Clustered Index Updateがあります。 |
![]() |
Window Spool | Window Spool 操作は、各行をその行に関連付けられたウィンドウを表す行セットに拡張します。 クエリでは、OVER 句でクエリの結果セット内のウィンドウを定義してから、ウィンドウ関数がウィンドウ内の各行の値を計算します。Window Spool は論理操作でもあり、物理操作でもあります。 |
Note
SQL Server のドキュメントでは、一般にインデックスに関して B ツリーという用語が使用されます。 行ストア インデックスで、SQL Server によって B+ ツリーが実装されます。 これは、列ストア インデックスやメモリ内データ ストアには適用されません。 詳細については、「SQL Server と Azure SQL のインデックスのアーキテクチャとデザイン ガイド」を参照してください。