Bonjour,
Je cherche à optimiser une requête SQL.
Voici ma requete de départ:
c'est le SUM qui semble poser problème, car la table 'instantdecimalserie_data' est très grande 1 milliards de lignes environ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SELECT t0.matricule matriculecpt, t2.nombreretours FROM (SELECT matricule, ID FROM meterinfo) t0, (SELECT backflowcount, ID FROM metermodule) mm, (SELECT measurepointinfo, meterinfo, metermodule FROM pointdemesure WHERE fin IS NULL) t1, (SELECT SUM (data_value) nombreretours, ID FROM instantdecimalserie_data WHERE (data_datetime >= '01/10/08') AND (data_datetime < '15/10/08') GROUP BY ID) t2 WHERE (t0.ID = t1.meterinfo) AND (mm.backflowcount = t2.ID) AND (t2.nombreretours > 0) AND (mm.ID = t1.metermodule)
Ma solution
un gain d'environ 30%.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 SELECT t0.matricule matriculecpt, t2.nombreretours FROM (SELECT matricule, ID FROM meterinfo) t0, (SELECT backflowcount, ID FROM metermodule) mm, (SELECT meterinfo, metermodule FROM pointdemesure WHERE fin IS NULL) t1, (SELECT SUM (data_value) nombreretours, ID FROM instantdecimalserie_data INNER JOIN (SELECT backflowcount FROM metermodule) mm ON mm.backflowcount = ID WHERE (data_datetime >= '01/10/08') AND (data_datetime < '15/10/08') GROUP BY ID) t2 WHERE (t0.ID = t1.meterinfo) AND (mm.backflowcount = t2.ID) AND (t2.nombreretours > 0) AND (mm.ID = t1.metermodule)
Qui dis mieux?
Partager