Ban*_*San 9 performance sql-server optimization execution-plan
我有一个简单的SELECT
声明。
USE [AdventureWorks2014]
GO
SELECT *
FROM Sales.SalesOrderDetail sod
Run Code Online (Sandbox Code Playgroud)
执行计划有两个Compute Scalar
.
为什么是这样?我原以为只得到
Index Scan
或者Table Scan
?
第一个(最右边的)有
[[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)))
Run Code Online (Sandbox Code Playgroud)
当第二个有:
[[sod].LineTotal] = Scalar Operator([AdventureWorks2014].[Sales].[SalesOrderDetail].[LineTotal] as [sod].[LineTotal])
Run Code Online (Sandbox Code Playgroud)
Bre*_*zar 18
计算标量与计算字段 LineTotal 相关。编写表格脚本,您将看到该字段定义为:
[LineTotal] AS (isnull(([UnitPrice]*((1.0)-[UnitPriceDiscount]))*[OrderQty],(0.0))),
Run Code Online (Sandbox Code Playgroud)
SQL Server 有两个操作要执行。它必须首先运行以下计算:
[UnitPrice]*((1.0)-[UnitPriceDiscount]))*[OrderQty]
Run Code Online (Sandbox Code Playgroud)
然后它必须检查该值是否为空,如果是,则替换为 0.0。
归档时间: |
|
查看次数: |
3399 次 |
最近记录: |