2010-09-21 50 views
17

¿Cómo puedo comparar dos consultas X e Y y decir que X es mejor que Y, cuando ambas toman casi el mismo tiempo en escenarios de casos pequeños?¿Cómo comparar dos consultas?

El problema es que tengo dos consultas que se supone que se ejecutan en una base de datos muy grande, por lo que ejecutar y evaluar no es una opción. Por lo tanto, creamos una pequeña base de datos para realizar algunas pruebas. Evaluar qué consulta es mejor es un problema, ya que en nuestra base de prueba, se ejecutan casi al mismo tiempo (aproximadamente 5 minutos). Además del tiempo necesario para regresar, ¿cuál es otra forma de medir qué tan buena es una consulta?

+0

Hola, simplemente pongo eso en cuestión MSSQL – User7354632781

Respuesta

26
SET STATISTICS IO ON 
SET STATISTICS TIME ON 

Ejecute las consultas y compare las lecturas lógicas para las diversas tablas y los tiempos de ejecución.

+8

@CombatCaptain También puede apilar las consultas de comparación en SSMS y presionar 'CTRL + M' (incluya el plan de ejecución real) y luego' F5'. A continuación, desplace el cursor sobre el primer nodo en la pestaña "Plan de ejecución real" y lea el "Costo estimado del subárbol". –

+2

Estas declaraciones no parecen ser generalmente compatibles. ERROR [15001] Ocurrió un error de sintaxis en o antes: SET STATISTICS IO ON – dokaspar

2

¿Has examinado los planes de consulta? Si las consultas devuelven los mismos datos y toman la misma cantidad de tiempo para ejecutarse, creo que los planes de consulta serán casi idénticos, lo que significa que no hay una diferencia significativa entre las dos consultas.

Además, ¿ha tenido en cuenta que las consultas funcionan de manera diferente a medida que cambia el tamaño de la base de datos?

Me pregunto si está optimizando prematuramente el código. En mi opinión, si tengo una consulta que funciona y es comprensible, puedo abordar problemas de rendimiento a través de índices. Y eso suele ser más fácil que cambiar las consultas para mejorar el rendimiento.

3

Como ya se mencionó, verifique los planes de ejecución.

Es importante que compare las dos consultas de manera justa al borrar la caché entre cada ejecución, solo para asegurarse de que no está viendo resultados sesgados debido al efecto de los datos que ya están en caché (no se ejecutan en el servidor de producción):

DBCC DROPCLEANBUFFERS -- clear proc plan cache 
DBCC FREEPROCCACHE -- clear data cache 

Luego lo que suelo hacer es verificar las Lecturas, Escrituras, CPU y Duración para comparar.

Es muy importante que realice una prueba con volúmenes de datos de nivel de producción (e idealmente mayor para ver cómo se escalará). Es en esos volúmenes donde realmente verá cualquier diferencia de rendimiento. Las pruebas con pequeños volúmenes de datos podrían dejarlo abierto a problemas más adelante.

0

La evaluación del rendimiento de la consulta en un conjunto de datos significativamente diferente generalmente tiene muy poco sentido. Los planes de consulta y su eficacia pueden variar mucho según las estadísticas de datos.

Para obtener estimaciones realistas, necesita una base de datos lo más cercana posible a la "real". Lo mejor de todo es que tome una copia de su "gran base de datos" y sintonice sus consultas.