J'ai créé une fonction sql SQLServer 2008 qui a déclaré une table temporaire et l'utilise pour calculer une moyenne mobile sur les valeurs à l'intérieurUtiliser avec vs déclarer une table temporaire: performance/différence?
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
mais j'ai aussi trouvé que vous pouvez déclarer le TempTable comme celui-ci :
with tempTable as
(
select * from aces.dbo.fEDVisitCounts('ALL', null,DATEADD(DD,-7,'01-09-2010'),
'04-09-2010',0,130,null,1, 0)
)
question: y at-il une grande différence dans ces deux approches? Est-il plus rapide que l'autre ou plus commun/standard? Je pense que la déclaration est plus rapide puisque vous définissez quelles sont les colonnes que vous recherchez .. Serait-il encore plus rapide si je devais omettre les colonnes qui n'étaient pas utilisées dans les calculs de moyenne mobile? l'un puisqu'il doit obtenir toutes les lignes de toute façon, bien que choisir moins de colonnes rend intuitivement que ce serait plus rapide/moins à faire)
J'ai aussi trouvé un create temporary table @table
d'ici How to declare Internal table in MySQL? mais je ne veux pas de la table pour persister en dehors de la fonction (je ne suis pas sûr si la table temporaire de création le fait ou non.)
Voici deux exemples de moyennes en cours qui ne nécessitent pas de table temporaire que vous pouvez essayer pour améliorer les performances: https://stackoverflow.com/questions/911326/sql-select-statement-for-calculating -a-running-average-column https: // stackoverflow.com/questions/26618353/t-sql-calculate-moving-average –