Bonjour à tous,

Je n'arrive pas à obtenir des performances sur cette requête :
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 
SELECT
	C1.IDVersions_Parcs,
	TI.Libellé AS LibTypeCompteur,
	C1.IDCompteurs AS IDCompteursJour,
	C1.Date AS DateJour,
	CAST(C1.Valeur AS UNSIGNED) AS ValeurJour,
	C2.IDCompteurs AS IDCompteursPrécédent,
	C2.Date AS DatePrécédente,
	CAST(C2.Valeur AS UNSIGNED) AS ValeurPrécédente,
	CONCAT(C1.IDCompteurs,C1.Date,C2.Date) AS Tri
FROM
	Compteurs C1
	INNER JOIN TypesInformation TI ON TI.IDTypesInformation=C1.IDTypesInformation
	INNER JOIN Compteurs C2 ON (
		C2.IDTypesInformation=C1.IDTypesInformation
		AND C2.IDVersions_Parcs=C1.IDVersions_Parcs
		AND C2.Date=(
			SELECT
				MAX(Date)
			FROM
				Compteurs
			WHERE
				Date<C1.Date
				AND IDTypesInformation=C1.IDTypesInformation
				AND IDVersions_Parcs=C1.IDVersions_Parcs
		)
	)
WHERE
	TI.IDNaturesInformation=2
	AND C1.Date>='2012-02-01'
	AND CAST(C1.Valeur AS UNSIGNED)>CAST(C2.Valeur AS UNSIGNED)
ORDER BY
	IDCompteursJour,
	DateJour DESC,
	DatePrécédente DESC
LIMIT
	1000
Le but étant de récupérer les compteurs pour lesquels, à la date immédiatement inférieure, la valeur est supérieure.
J'ai eu beau la tourner dans tous les sens ... elle est (très) lente.

Merci pour votre aide