对于下面的AdventureWorks示例数据库查询:
SELECT
P.ProductID,
CA.TransactionID
FROM Production.Product AS P
CROSS APPLY
(
SELECT TOP (1)
TH.TransactionID
FROM Production.TransactionHistory AS TH
WHERE
TH.ProductID = P.ProductID
ORDER BY
TH.TransactionID DESC
) AS CA;
执行计划显示Index Seek的Estimated Operator Cost为0.0850383 (93%) :
成本与使用的基数估计模型无关。
它不是Estimated CPU Cost和Estimated I/O Cost的简单相加。它也不是一次执行Index Seek的成本乘以Estimated Number of Executions。
这个成本数字是如何得出的?
完整的成本推导逻辑很复杂,但对于问题中相对简单的情况:
输入
运算符执行的次数
这是估计的执行次数:504
索引中的基数(总行数)Index Seek
运算符 的TableCardinality属性给出:113,443
索引中的数据页数:201
这个数字可以通过多种方式获得,例如来自
sys.allocation_units
:索引的密度(1 / distinct values):0.002267574
这在索引统计的密度向量中可用:
计算
数据库<>小提琴