Création d'une requête SQL pour récapituler certaines données. C'est lent, alors j'ai pensé demander de l'aide.Affiner ma requête T-SQL pour augmenter les performances
table est une table de journal qui a:
loc, tag, entrytime, exittime, visits, entrywt, exitwt
Mon journal de test a 700.000 dossiers en elle. Les entrytime
et exittime
sont des valeurs d'époque.
Je sais que ma requête est inefficace car elle déchire la table 4 fois.
select
loc, edate, tag,
(select COUNT(*) from mylog as ml
where mvlog.loc = ml.loc
and mvlog.edate = CONVERT(date, DATEADD(ss, ml.entrytime, '19700101'))
and mvlog.tag = ml.tag) as visits,
(select SUM(entrywt - exitwt) from mylog as ml2
where mvlog.loc = ml2.loc
and mvlog.edate = CONVERT(date, DATEADD(ss, ml2.entrytime, '19700101'))
and mvlog.tag = ml2.tag) as consumed,
(select SUM(exittime - entrytime) from mylog as ml3
where mvlog.loc = ml3.loc
and mvlog.edate = CONVERT(date, DATEADD(ss, ml3.entrytime, '19700101'))
and mvlog.tag = ml3.tag) as occupancy
from
eventlogV as mvlog with (INDEX(pt_index))
Index pt_index
est composé de colonnes tag
et loc
.
Lorsque j'exécute cette requête, elle se termine en 30 secondes environ. Comme ma requête est inefficace, je suis sûr que ça peut être mieux.
Toutes les idées ont été appréciées.
Pouvez-vous publier le plan d'exécution? Peut-être nous donner quelques définitions de table/index? –
'eventlogV' et' mylog' sont deux tables différentes? –
Je crois que tout type de question 'refine' est mieux posté sur http://codereview.stackexchange.com/. – Ralph