Velocizzare una query di SOMMA

mercoledì 19 marzo 2008 - 12.04

MagicBotolo Profilo | Newbie

Ciao a tutti,
sto lavorando su un database (Microsoft SQL Server 2000) dal quale devo estrarre dati acquisiti dal mondo esterno tramite strumentazione.
In particolare ho una colonna di dati che di volta in volta devono essere sommati tra loro... mi spiego, poniamo il caso di avere una tabella fatta così:

DATAORA ... DATO
dataora1 ... 0
dataora2 ... 1
dataora3 ... 1
dataora4 ... 0

Io devo fornire come risultato una tabella fatta così:

DATAORA ... DATO
dataora1 ... 0
dataora2 ... 1
dataora3 ... 2
dataora4 ... 2

In pratica sommo ogni dato con quello precedente (che a sua volta è ricavato dalla somma con quelli precedenti... tranne per il primo dato che riporto tale e quale).

Avevo già scritto nel forum per chiedere una mano e dopo alcuni consigli ho adattato le procedure proposte e sto usando una query di questo tipo:

SELECT T1.DATAORA,
SUM(CASE WHEN T1.ID_SENS=158 AND T1.TIPO_ELAB=7
AND (CAST(T1.ID_MIS AS nvarchar(100)) = N'19')
THEN T2.DATO
ELSE NULL
END)
AS [19(158)]

FROM TABELLA_1 AS T1 LEFT JOIN TABELLA_1 AS T2 ON
(T2.DATAORA between CONVERT(datetime,'2008/02/10 16:00:00',101)
and CONVERT(datetime,'2008/02/10 17:00:00',101)
and T1.DATAORA>DATEADD(mi,-1,T2.DATAORA)), TABELLA_2

WHERE
T1.DATAORA between convert(datetime,'2008/02/10 13:00:00',101)
and convert(datetime,'2008/02/10 17:00:00',101)
and T1.ID_SENS=TABELLA_2.ID_SENS
and T1.ID_MIS=TABELLA_2.ID_MIS
and T2.ID_SENS=T1.ID_SENS
and T2.ID_MIS=T1.ID_MIS

GROUP BY T1.DATAORA
ORDER BY T1.DATAORA

Nella TABELLA_1 sono contenuti i dati da sommare e i campi dataora corrispondenti, nella TABELLA_2 vengono indicate le colonne sulle quali effettuare la somma.
In TABELLA_1 ci sono tanti dati divisi per tipo di grandezza misurata; non tutte le grandezze devono essere trattate in questo modo, alcune devono essere riportate così come sono state acquisite.
Nella TABELLA_2 sono contenuti i nomi delle colonne che devono essere trattate con questa procedura.

Se eseguo la procedura ottengo i risultati desiderati... ma in tempi tremendi!!!
Se i dati sono pochi (qualche decina) i tempi di esecuzione sono ridotti o comunque accettabili.
Se i dati aumentano (e io devo lavorare con parecchi dati... migliaia) i tempi di esecuzione diventano allucinanti.

Vi chiedo se qualcuno sa consigliarmi qualche tecnici per ottimizzare il codice o se invece devo proprio cambiare sistema!!
Ciao!!

Aggiornamento: non riesco proprio a trovare un modo per rendere più veloce questa query... qualche consiglio?
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5