|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : février 2008 Messages : 9 ![]() |
Bonjour,
J'utilise pas mal de requête du genre : Code :
Code :
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 :
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 |
||||||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Inscription : août 2008 Messages : 1 690 ![]() |
Je l'écrirais plutôt comme ça, inutile de repasser sur matable1 :
Code :
[EDIT] Au fait je ne connais pas firebird, la doc sur merge concerne la 2.5, je ne sais pas si le fonctionnement est identique en 2.1 |
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 9 ![]() |
Merci skuatamad
Je vais essayer ça. Effectivement, tu fais bien de préciser, j'ai l'impression que Firebird est en évolution perpétuelle, à la mode JAVA, du coup, suivant les versions, il y a des choses disponibles, d'autres non, d'autres plus... |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 9 ![]() |
Je ne vois pas très bien le fonctionnement du SELECT 1 ?
Tu pourrais expliciter ? Merci |
|
|
00
|
|
|
#5 | |||
|
Expert Confirmé
![]() Inscription : août 2008 Messages : 1 690 ![]() |
Avec EXISTS il n'est pas nécessaire de sélectionner des colonnes dans la sous-requête : EXISTS and SINGULAR
Citation:
Et puis 1 ou NULL montre bien que la logique n'est pas dans les colonnes sélectionnées mais dans la corrélation entre les 2 requêtes. Sinon tu peux aussi utiliser IN : Code :
|
|||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 9 ![]() |
Alors, désolé, j'avais oublié le IN dans la première requête de mon post.
J'utilise actuellement la méthode du WHERE T1.ID IN(SELECT. . . ) Et c'est justement l'objet de mon post car cette méthode prend énormément de temps car il semble que le moteur Firebird exécute la sous-requête autant de fois que le nombre de résultat de cette sous-requête, enfin c'est une supposition. Mais plus il y a de résultats, plus ça prend des plombe. Je vais essayer ton autre solution. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com