it-swarm-fr.com

Groupe par heure sur un grand jeu de données

En utilisant MS SQL 2008, je sélectionne un champ moyen à partir de 2,5 millions d'enregistrements. Chaque enregistrement représente une seconde. Myfield est une moyenne horaire de ces 1 seconde enregistrements. Bien sûr, la CPU du serveur atteint 100% et la sélection prend trop de temps. Je dois éventuellement enregistrer ces valeurs moyennes afin que SQL ne soit pas obligé de sélectionner tous ces enregistrements sur chaque demande. Ce qui peut être fait?

  SELECT DISTINCT
         CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR) AS TimeStampHour,
         MIN([timestamp]) as TimeStamp,
         AVG(MyField) As AvgField
    FROM MyData
   WHERE TimeStamp > '4/10/2011'
GROUP BY CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR)
ORDER BY TimeStamp
12
SOF User

Voir cette question ( étage A Date ) En outre, pourquoi vous soucier de la conversion de tout entrant - vous pouvez le faire plus tard (si vous en avez besoin).

  SELECT DISTINCT
         dateadd(hour,datediff(hour,0,[timestamp]),0) AS TimeStampHour,
         MIN([timestamp]) as TimeStamp,
         AVG(MyField) As AvgField
    FROM MyData
   WHERE TimeStamp > '4/10/2011'
GROUP BY dateadd(hour,datediff(hour,0,[timestamp],0);
ORDER BY TimeStamp
3
Hogan

Voulez-vous rendre la requête plus rapide ou que vous vous demandez comment créer un instantané de données et l'enregistrer?

Si vous voulez le rendre plus rapide, vous avez certainement besoin d'un index sur le champ Timeestamp. En outre, je suggérerais d'utiliser ceci pour convertir une heure:

select convert(varchar(13), getdate(), 121)

Si vous avez besoin de faire un instantané et de la réutiliser ultérieurement, utilisez insert into Pour créer une nouvelle table avec les résultats de votre requête. Table d'index en fonction et utilisez-la. De ce que je comprends, vous aurez besoin d'un index sur TimeStamphour.

Vous pouvez également configurer un travail qui prévoit des données quotidiennes dans votre nouvelle table d'agrégats.

1
Alex Aza