Optimisation requête sum()
Bonjour,
Je cherche à optimiser une requête SQL.
Voici ma requete de départ:
Code:
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) |
c'est le SUM qui semble poser problème, car la table 'instantdecimalserie_data' est très grande 1 milliards de lignes environ.
Ma solution
Code:
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) |
un gain d'environ 30%.
Qui dis mieux?