Estoy aprendiendo sobre los planes de ejecución y estoy probando diferentes consultas y comparando su rendimiento y me topé con esto:
SELECT StatisticID
FROM (
SELECT StatisticID, ROW_NUMBER() OVER (ORDER BY StatisticID) AS rn
FROM FTCatalog.Statistic
) AS T
WHERE T.rn <= 1000
ORDER BY rn
SELECT TOP 1000 StatisticID
FROM FTCatalog.Statistic
ORDER BY StatisticID
Ambos devuelven el mismo conjunto de resultados; sin embargo, el primero se ejecuta más rápido y consume menos recursos (al menos SSMS me dice que) Aquí hay planes de ejecución:
Comparación de SQL Query Plan Explorer: ¿Alguien podría darme una idea de lo que realmente está sucediendo detrás de escena y por qué los resultados difieren? Si necesita algo más, hágamelo saber.
Gracias Evaldas.
sql-server
query-performance
execution-plan
Evaldas Buinauskas
fuente
fuente
Respuestas:
Supongo que está comparando los costos estimados de las consultas. Esas son solo estimaciones basadas en (entre otras cosas) el número estimado de filas devueltas por la consulta. No es el número real de filas.
Su primera consulta estimó que devolvería 30 filas y su segunda consulta estimó 1000 filas. De ahí proviene su diferencia en el costo de la consulta.
Si cambia las consultas para obtener solo 30 filas, verá que las filas estimadas son las mismas para las consultas y la primera consulta en realidad tiene un costo un poco más alto, al menos para mí en SQL Server 2014.
No utilice las estimaciones al comparar el rendimiento de las consultas. Utilice cosas como la duración, el número de lecturas y el tamaño de las concesiones de memoria.
fuente