He creado una función de SQL en SQL Server 2008 que declaró una tabla temporal y lo utiliza para calcular un promedio móvil de los valores dentro deUsar con vs declarar una tabla temporal: rendimiento/diferencia?
declare @tempTable table
(
GeogType nvarchar(5),
GeogValue nvarchar(7),
dtAdmission date,
timeInterval int,
fromTime nvarchar(5),
toTime nvarchar(5),
EDSyndromeID tinyint,
nVisits int
)
insert @tempTable select * from aces.dbo.fEDVisitCounts(@geogType, @hospID,DATEADD(DD,[email protected] + 1,@fromDate),
@toDate,@minAge,@maxAge,@gender,@nIntervalsPerDay, @nSyndromeID)
INSERT @table (dtAdmission,EDSyndromeID, MovingAvg)
SELECT list.dtadmission
, @nSyndromeID
, AVG(data.nVisits) as MovingAvg
from @tempTable as list
inner join @tempTable as data
ON list.dtAdmission between data.dtAdmission and DATEADD(DD,@windowDays - 1,data.dtAdmission)
where list.dtAdmission >= @fromDate
GROUP BY list.dtAdmission
pero también descubrió que se puede declarar la TempTable como esto :
with tempTable as
(
select * from aces.dbo.fEDVisitCounts('ALL', null,DATEADD(DD,-7,'01-09-2010'),
'04-09-2010',0,130,null,1, 0)
)
pregunta: ¿hay una diferencia importante en estos dos enfoques? ¿Es uno más rápido que el otro o más común/estándar? Creo que la declaración es más rápida ya que define cuáles son las columnas que está buscando. ¿Sería incluso más rápido si omitiera las columnas que no se usaron en los cálculos del promedio móvil? (No estoy seguro de esto). uno ya que tiene que obtener todas las filas de todos modos, aunque seleccionar menos columnas tiene sentido intuitivo de que sería más rápido/menos que hacer)
También encontré create temporary table @table
de aquí How to declare Internal table in MySQL? pero no quiero la tabla para persistir fuera de la función (no estoy seguro de si la tabla temporal crea esto o no).
Aquí hay dos ejemplos de promedios en ejecución que no requieren una tabla temporal que quizás desee probar para posibles mejoras de rendimiento: https://stackoverflow.com/questions/911326/sql-select-statement-for-calculating -a-running-average-column https: // stackoverflow.com/questions/26618353/t-sql-calculate-moving-average –