|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : juillet 2004 Messages : 54 ![]() |
Bonsoir,
Je souhaiterais optimiser la requête suivante : SELECT A.ID1 , A.ID2 , A.DATE, A.IDCLT1, A.CANAL FROM TABLE A WHERE A.ID1 = ? AND A.DATE >= ? AND A.ID2 >= ? AND ( ( A.IDCLT = ? AND A.CANAL = 'AGC' ) OR ( A.REFCLT = ? AND A.CANAL <> 'AGC' ) ) ORDER BY A.ID1, A.ID2, A.DATE Le DBA m'a recommandé d'enlever le OR de la requête mais j'en ai besoin ! De plus, je ne peux pas découper la requête en deux, car elle est utilisée par un programme paginé (d'où l'ORDER BY) La clé primaire de la table est ID1, ID2 et REFCLT. Merci. |
|
|
00
|
|
|
#2 | ||
![]() ![]() |
Il est difficile de donner une réponse comme cela mais ton DBA a raison. Le or est le point faible. Evidemment, tu en as besoin. Tu peux essayer quelque chose comme ceci:
Code :
|
||
|
00
|
|
|
#3 |
|
Membre Expert
![]() ![]() François DurandSpécialiste Delivery Mainframe IBM Inscription : octobre 2005 Messages : 1 097 ![]() |
Questions :
Quelle plateforme ? Combien de lignes retourne la requête ? Comment est gérée la pagination ? |
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : juillet 2004 Messages : 54 ![]() |
Plateforme : Mainframe IBM, MVS
Contexte : Application J2EE Nombre de ligne retournée : je dirais au maximum 2/an/client et il y a en entrée une liste de 10 clients et comme nous travaillons sur un historique de 3 ans, une soixantaine de ligne MAX Actuellement, nous sommes en test de charge, j'ai trouvé un client avec 70 entités ! En bref, la pagination : le programme qui utilise cette requête retourne les éléments 100 par 100, si quand il remplit le centième élément, il reste encore des informations à retourner, il alimente avec ID2 une clef de reprise qui est retransmise à la partie java qui rappel alors le programme, etc ... @jab : Malheureusement les outils maison de mon client ne me permet pas de programmer ce type de requête. |
|
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : juillet 2004 Messages : 54 ![]() |
La solution de Jab a pu être implémentée : on divise le coût relatif de la requête par 10.
|
|
|
00
|
|
|
#6 |
![]() ![]() |
Tant qu'a bien faire, met UNION ALL au lieu de UNION tu éviteras encore une tâche à DB2. Désolé de ne pas l'avoir mis directement
|
|
00
|
|
|
#7 |
|
Candidat au titre de Membre du Club
![]() Inscription : novembre 2007 Messages : 21 ![]() |
désolé, si ta clé primaire est ID1 + ID2 + REFCLT et que tu as besoin de paginer, il y a des records que tu n'affichera pas lors de ta pagination avec une telle requete.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com