Seek述語のスカラー演算子


8

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)

実行計画

ここに画像の説明を入力してください

述語を求める

ここに画像の説明を入力してください

回答:


10

このシーク述語でのスカラー演算子の目的は何ですか?

olic.ContainerID質問の列の「スカラー演算子」は、列の外部参照がネストされたループ(適用)の反復ごとに単一の行(スカラー)を提供していることを単に示しています。それは純粋に建築的であり、心配する必要はありません。

細部

内部的には、クエリプロセッサは、ツリーレベルで動作します。ツリーレベルには、基本的なレベルで、リレーショナル(テーブル値)操作とスカラー(単一行)操作の組み合わせが含まれています。

SQL Serverはプラン表示出力を構築する場合、(パブリックプラン表示のために有効になっている)ツリー内の各演算子は、(出力対象に適した表現を生成するように要求されSHOWPLAN_XMLSHOWPLAN_TEXTSTATISTICS XML...と上のようにします)。

XML出力フォーマットは、に準拠しなければならないプラン表示スキーマの両方のリレーショナルおよびスカラー演算子の要素を含みます。スキーマは、多くの場所でスカラー演算子要素を指定します。

特定のテキスト「Scalar Operator(...)」がSSMSツールチップに表示されるか、プロパティウィンドウに表示されるか、または未加工のXMLのみに表示されるかは、各レイヤーの実装の詳細によって異なります。

たとえば、単純なクエリ:

SELECT TOP (1) 1;

... SSMSツールチップに「スカラーオペレーター」のないプランを作成しますが、プロパティウィンドウのコンピュートスカラーリレーショナルオペレーターには存在します。

スカラースカラーオペレーターの計算

...そして、Top関係演算子の生のXMLでのみ:

トップスカラー演算子

すべての実用的な目的のために、「スカラー演算子」のテキストは単に無視されるべきです。それが囲むものがスカラーであること以外は何も意味しません。


3

このシーク述語でのスカラー演算子の目的は何ですか?

スカラー演算子は「as」です。列のエイリアスです。なぜこれが起こっているのですか?それは少し掘り下げました、そして、私はまだ100%具体的な答えを本当に見つけませんでした。私が見つけた唯一の参照は、SQL Server実行計画、第2版でした。 この本は、オプティマイザが結合またはシークの順序を変更することを決定したときに、シーク述語でのこの操作が発生すると述べています。


2
これはグラントがその本を書いたときの良い推測でしたが、それは正しくありません、私は恐れています。
ポールホワイト9
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.