a) récrire la requête ainsi :
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
| SELECT ....
FROM Demande Dmd
INNER JOIN Corp Crp
ON Dmd.col1 = Crp.col1
INNER JOIN Salarie Sal
ON Dmd.col1 = Sal.col1
AND Dmd.numsal = Sal.numsal
INNER JOIN Structure Str
ON Str.col1 = Sal.col1
AND Str.refstr = Sal.refstr
WHERE Dmd.col1 = 9999
AND Dmd.kode IN (0,1) -- si possible remplacer par : Dmd.kode BETWEEN 0 AND 1
AND Crp.idcrp = 7777
AND Dmd.cree = (SELECT Max(dmd2.cree)
FROM Demande Dmd2
WHERE Dmd2.col1 = Dmd.col1
AND Dmd2.numsal = Dmd.numsal
AND Dmd2.kode IN (0,1) -- si possible remplacer par : Dmd2.kode BETWEEN 0 AND 1
AND Dmd2.ddebvlt <= Current Date)
AND EXISTS (SELECT *
FROM Corpstr Crpstr
WHERE Crpstr.col1 = Crp.col1
AND Crpstr.idcrp = Crp.idcrp
AND Fonction1(crp.col1,sal.refstr,crpstr.refstr) = 1) -- pouvez vous remplacer cette fonction par du pur SQL ? |
b) Les index suivant existent-ils ?
1) demande (Col1)
2) Corp (Col1)
3) Salarie (col1, NumSal)
4) Structure (col1, refstr
5) demande (kode)
6) demande (cree)
7) demande (col1, numsal, ddebvlt, kode)
8) Corpstr (col1, idcrp)
9) corp (col1, odcrp)
sinon, voir si les créer améliore les temps de réponse (essais un à un par rapport au plan de requête).
A +
Partager