optimisation "UPDATE <> WHERE ID IN (SELECT <> )"
Bonjour,
J'utilise pas mal de requête du genre :
Code:
1 2 3 4 5 6 7 8 9 10
| UPDATE MATABLE1 T1
SET T1.FIELD = "QQC"
WHERE T1.ID IN
(
SELECT T2.ID
FROM MATABLE1 T2
JOIN MATABLE2 T3
ON T2.ID = T3.T2ID
WHERE <conditions plus ou moins complexe...>
) |
En fait, de souvenir, je passe par là car je suis en Firebird 2.1 et le moteur n'accepte pas de faire des UPDATE sur plusieurs tables:
Code:
1 2 3
| UPDATE MATBLE1 T1,MATABLE2 T2
SET T1.FIELD = "QQC"
WHERE T1.F1 =... AND T2.F3 = .... |
Ou même en passant par des JOIN au niveau de l'UPDATE, il rejette la requête
Le truc c'est qu'en passant par une sous-requête et en faisant WHERE ID IN (liste ID résultat d'une requête)
J'ai l'impression, en fait vu les statistique du résultat, c'est pas qu'une impression, qu'il exécute la sous-requête autant de fois qu'elle ne contient de résultat. Du coup, le temps d'exécution est énorme et est proportionnel au nombre de resultat de sou-requête.
Actuellement j'arrive à optimiser manuellement en exécutant la sous-requête, en copiant les résultats en y insérant une virgule et j'exécute l'UPDATE avec la liste des ID copiés.
Code:
1 2 3 4
| UPDATE MATABLE1 T1
SET T1.FIELD = "QQC"
WHERE T1.ID IN
(234234,46573,23545,24567,5674578,65463,245654,....) |
Efficace, mais laborieux :o/
N'y a-t-il pas un autre moyen pour faire ce genre de chose ?
Merci d'avance
Hervé
[EDIT] oublié le IN dans WHERE