web-dev-qa-db-ja.com

この実行プランにコンピューティングスカラーがあるのはなぜですか?

単純なSELECTステートメントがあります。

USE [AdventureWorks2014]
GO

SELECT *
FROM Sales.SalesOrderDetail sod

実行計画には2つのCompute Scalar

Execution Plan showing Compute Scalars なぜですか? Index Scanまたは多分Table Scan

最初の(rght-most)は

 [[AdventureWorks2014].[Sales].[SalesOrderDetail].LineTotal] = Scalar Operator(isnull(CONVERT_IMPLICIT(numeric(19,4),[AdventureWorks2014].[Sales].[SalesOrderDetail].[UnitPrice] as [sod].[UnitPrice],0)*((1.0)-CONVERT_IMPLICIT(numeric(19,4),[AdventureWorks2014].[Sales].[SalesOrderDetail].[UnitPriceDiscount] as [sod].[UnitPriceDiscount],0))*CONVERT_IMPLICIT(numeric(5,0),[AdventureWorks2014].[Sales].[SalesOrderDetail].[OrderQty] as [sod].[OrderQty],0),(0.000000)))

2番目の場合:

[[sod].LineTotal] = Scalar Operator([AdventureWorks2014].[Sales].[SalesOrderDetail].[LineTotal] as [sod].[LineTotal])
7
BanksySan

計算スカラーは、計算フィールドLineTotalに関連しています。テーブルをスクリプト化すると、次のように定義されたフィールドが表示されます。

[LineTotal]  AS (isnull(([UnitPrice]*((1.0)-[UnitPriceDiscount]))*[OrderQty],(0.0))),

SQL Serverには、実行する2つの操作があります。最初に次の計算を実行する必要があります。

[UnitPrice]*((1.0)-[UnitPriceDiscount]))*[OrderQty]

次に、その値がnullかどうかを確認し、nullの場合は0.0に置き換えます。

16
Brent Ozar