Salve a tutti (è il mio primo post e non vorrei aver sbagliato sezione).
Premetto che ciò che scrivo è stato testato con sql server 2005 (non ho modo di provare su 2008, e purtroppo non ho un db corposo tale da verificarne i tempi).
La mia domanda è: l'actual execution plan è reale oppure potrebbe essere errato?
Prendo in considerazioni i seguenti batch (su northwind):
1) select ProductID
, UnitPrice
, (select AVG(UnitPrice) from [Order Details]) as a
, (select AVG(UnitPrice) from [Order Details]) as b
, (select AVG(UnitPrice) from [Order Details]) as c
from [Order Details]
GO
2) select ProductID, UnitPrice, a as A, a as B, a as C
from (
select ProductID
, UnitPrice
, (select AVG(UnitPrice) from [Order Details]) as a
from [Order Details]
) as k
GO
Nel primo caso, osservando l'execution plan, noto come la query presente in select viene eseguita 3 volte, cosa che ovviamente non succede con la seconda. Eseguendo i due comandi, noto come il secondo costi 36% mentre il primo 64%. E' possibile che l'execution plan sia errato? Mi pare strano che sql server esegui per 3 volte lo statement di aggregazione.
So che forse è una domanda semplice ma non riesco a capire bene di chi non fidarmi :)
Grazie mille.