SQL Server 2012で実際のクエリを簡略化したバージョンを以下に示します。コンテナテーブルからデータを選択するときに、シーク述語にスカラー演算子があります。
このシーク述語でのスカラー演算子の目的は何ですか?
CREATE TABLE #EligibleOrders (OrderID INT PRIMARY KEY,
StatusCD CHAR(3),
CreatedOnDate DATETIME
)
--insert logic into #EligibleOrders
--Final Query
SELECT T2.OrderID ,olic.LineItemID,
SUM(c.quantity) AS ShippedQty,
COUNT(DISTINCT c.ContainerID) AS ShippedCases
FROM #EligibleOrders T2
INNER JOIN dbo.OrderLineItemContainers (NOLOCK) AS olic
ON olic.OrderID = T2.OrderID
INNER JOIN dbo.Containers (NOLOCK) AS c
ON olic.Containerid = c.Containerid
GROUP BY T2.OrderID ,olic.LineitemID
OPTION (MAXDOP 1)
実行計画
述語を求める
このシーク述語でのスカラー演算子の目的は何ですか?
質問のolic.ContainerID
列の「スカラー演算子」は、列の外部参照がネストされたループ(適用)の反復ごとに単一の行(スカラー)を提供していることを示しています。それは純粋に建築であり、心配する必要はありません。
内部的には、クエリプロセッサはツリー表現に基づいて動作します。ツリー表現には、基本レベルで、リレーショナル(テーブル値)操作とスカラー(単一行)操作の組み合わせが含まれています。
SQL Serverがshowplan出力を作成するとき、(パブリックshowplanに対して有効になっている)ツリー内の各オペレーターは、出力ターゲット(SHOWPLAN_XML
、SHOWPLAN_TEXT
、STATISTICS XML
]に適した表現を生成するように求められます。 ..等々)。
XML
出力形式は、関係演算子とスカラー演算子の両方の要素を含む showplan schema に準拠する必要があります。スキーマは、多くの場所でスカラー演算子要素を指定します。
特定のテキスト「Scalar Operator(...)」がSSMSツールチップに表示されるか、[プロパティ]ウィンドウに表示されるか、生のXMLのみに表示されるかは、各レイヤーの実装の詳細によって異なります。
たとえば、単純なクエリ:
SELECT TOP (1) 1;
... SSMSツールチップに「スカラーオペレーター」のないプランを生成しますが、プロパティウィンドウのコンピュートスカラーリレーショナルオペレーターには存在します。
...そして、Top関係演算子の生のXMLのみ:
すべての実用的な目的のために、「スカラー演算子」のテキストは単に無視されるべきです。それが囲むものがスカラーであること以外は何も意味しません。
このシーク述語でのスカラー演算子の目的は何ですか?
スカラー演算子は「as」です。列のエイリアスです。なぜこれが起こっているのですか?それは少し掘り下げました、そして私はまだ100%具体的な答えを本当に見つけませんでした。 Sql Server Execution Plans、2nd Editionにある唯一の参照は、オプティマイザが決定したときにシーク述語でこの操作が発生することを本に記載しています結合またはシークの順序を変更する。