Para a consulta de banco de dados de exemplo AdventureWorks abaixo:
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;
O plano de execução mostra um Custo Estimado do Operador de 0,0850383 (93%) para a Busca do Índice :
O custo é independente do modelo de estimativa de cardinalidade em uso.
Não é uma simples adição do Custo Estimado da CPU e do Custo Estimado de E/S . Tampouco é o custo de uma execução do Index Seek multiplicado pelo Número Estimado de Execuções .
Como se chegou a esse número de custo?
A lógica de derivação de custo total é complexa, mas para o caso relativamente simples da questão:
Entradas
O número de vezes que o operador é executado
Este é o número estimado de execuções : 504
A cardinalidade (número total de linhas) no índice
A propriedade TableCardinalidade do operador Index Seek fornece isto: 113.443
O número de páginas de dados no índice: 201
Este número pode ser obtido de várias maneiras, por exemplo
sys.allocation_units
:A densidade (1 / valores distintos ) do índice: 0,002267574
Isso está disponível no vetor de densidade das estatísticas do índice:
Computação
db<>violino