2011-06-28 25 views
11

me pregunto si SQL Server sabe a 'caché' si te gusta agregados mientras que en una consulta, si se utilizan de nuevo SQL Server.desempeño agregado

Por ejemplo,

Select Sum(Field), 
     Sum(Field)/12 
From Table 

Would SQL Server sabe que ya ha calculado la función Suma en el primer campo y luego simplemente se divide por 12 para el segundo? ¿O ejecutaría la función Sum nuevamente y luego la dividiría entre 12?

Gracias

Respuesta

8

Se calcula una vez

Select 
    Sum(Price), 
    Sum(Price)/12 
From 
    MyTable 

El plan da:

|--Compute Scalar(DEFINE:([Expr1004]=[Expr1003]/(12.))) 
    |--Compute Scalar(DEFINE:([Expr1003]=CASE WHEN [Expr1010]=(0) THEN NULL ELSE [Expr1011] END)) 
    |--Stream Aggregate(DEFINE:([Expr1010]=Count(*), [Expr1011]=SUM([myDB].[dbo].[MyTable].[Price]))) 
     |--Index Scan(OBJECT:([myDB].[dbo].[MyTable].[IX_SomeThing])) 

Esta tabla tiene 1,35 millones de filas

+1

+1: Buen resumen del plan: o) –

+0

Gracias, eligió este para el plan. –

-3

buena pregunta, creo que la respuesta es no, no no almacena en caché ella.

me pasó una consulta de prueba con alrededor de 3000 conteos en ella, y fue mucho más lento que una con sólo unos pocos. Todavía quiero probar si la consulta sería tan lenta seleccionando solo columnas simples

editar: OK, acabo de intentar seleccionar una gran cantidad de columnas o solo una, y la cantidad de columnas (cuando se habla de miles devueltos) afecta la velocidad.

En general, a menos que utilice ese número agregado de una tonelada de veces en la consulta, que debe estar bien. Hora de la verdad, siempre se puede guardar el resultado a una variable y hacer los cálculos después de los hechos.

+0

-1 - El tiempo podría ser una indicación de cuánto tiempo se necesita para hacer que los resultados, o tirar de las ocurrencias de 3000 el mismo valor de la memoria, y no tiene ninguna indicación de si el el resultado está en caché o no. – JNK

+0

estuvo de acuerdo, es por eso que puse una edición y dije – Limey

+0

OK, pero la primera línea de su respuesta sigue siendo objetiva y demostrablemente incorrecta, por lo que se mantiene el downvote. – JNK

3

De acuerdo con el plan de ejecución, que no vuelve a sumar la columna.