Bonjour,
Voilà, j'ai une grosse table d'une base de données dans un groupe de disponibilité Aways ON
La table est partitionnées par semaine et une semaine a environ 40 millions de lignes.
La table possède 2 colonnes [Jour_bebut], [Jour_fin] définissant l’intervalle de jours où une ligne est applicable:
[Jour_bebut], [Jour_fin] = (1,15) la ligne est applicable pour les jours 1,2...15
Les jours possibles sont de 1 à 400 enregistrés dans une table de référence:
TableRef (Jour int not null)
Je veux faire une SUM ... GROUP BY pour avoir les valeurs par jour possible (non par intervalle ) :
1 2 3 4 5 6 7
|
SELECT t.Jour,t.semaine,r.col1,r.col2...,SUM(r.val)
FROM TableBase t
INNER JOIN TableRef r ON r.Jour BETWEEN t.Jour_debut AND t.Jour_fin
AND t.semaine = 202123 /* une seule semaine pour tester */
GROUP BY t.Jour,t.semaine,r.col1,r.col2... |
La jointure génère environ 7 milliards de lignes.... et la requête échoue à cause de problème d'espace :
1 2 3
|
Msg 1101, Level 17, State 166, Line 52
Could not allocate a new page for database 'TEMPDB' because of insufficient disk space in filegroup 'DEFAULT'. Create the necessary space .... |
Quelqu'un a t-il une astuce pour ce genre de requêtes avec ces volumétries ?
D'avance Merci
Partager