¿Alguien me puede ayudar a comprender el plan de ejecución de SQL Server para las siguientes consultas?Función escalar de SQL Server versus análisis de plan de ejecución de subconsulta
Esperaba que la versión de la subconsulta (Query 2) se ejecutara más rápido, porque está basada en conjuntos. Este parece ser el caso cuando runnning las consultas de forma independiente - marginalmente - sin embargo, el plan de ejecución muestra los costos de la consulta como 15% vs. 85%, respectivamente:
//-- Query 1 (15%) - Scalar Function
SELECT
gi.GalleryImageId,
gi.FbUserId,
dbo.GetGalleryImageVotesByGalleryImageId(gi.GalleryImageId) AS Votes
FROM
GalleryImage gi
//-- Query 2 (85%) - Subquery
SELECT
gi.GalleryImageId,
gi.FbUserId,
(SELECT COUNT(*) FROM GalleryImageVote WHERE GalleryImageId = gi.GalleryImageId)
FROM
GalleryImage gi
¿Qué me falta aquí; ¿el plan de ejecución omite el costo de la función? Además, ¿hay alguna sugerencia sobre si alguno de los anteriores sería mejor servido con una consulta CTE o OVER/PARTITION?
¡Gracias de antemano!
¿Las tiene ambas en la misma ventana del editor de consultas? Porque el analizador de consultas los comparará y asignará a cada uno un valor relativo a lo que está en la ventana (15%/85%). – JNK
Sí, de ahí vienen los% values :) – Robarondaz
El tiempo de ejecución de la consulta no siempre es igual al costo. Parece que SQL Server pondera el uso de CPU y RAM más que las lecturas de HDD. – jahu