Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2006, 18h27   #1
Membre du Club
 
Inscription : juillet 2004
Messages : 54
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 54
Points : 41
Points : 41
Par défaut Optimisation requête DB2

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.
LuckyLiam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2006, 19h48   #2
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
SELECT * 
FROM (
        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'
        UNION
        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.REFCLT = ?
              AND A.CANAL <> 'AGC'
        ) AS TEMP
ORDER BY TEMP.ID1, TEMP.ID2, TEMP.DATE
Sans garantie. Il faut faire le test.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2006, 20h33   #3
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 097
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 097
Points : 1 706
Points : 1 706
Questions :
Quelle plateforme ?
Combien de lignes retourne la requête ?
Comment est gérée la pagination ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2006, 09h37   #4
Membre du Club
 
Inscription : juillet 2004
Messages : 54
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 54
Points : 41
Points : 41
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.
LuckyLiam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 18h59   #5
Membre du Club
 
Inscription : juillet 2004
Messages : 54
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 54
Points : 41
Points : 41
Par défaut [Résolu]

La solution de Jab a pu être implémentée : on divise le coût relatif de la requête par 10.
LuckyLiam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2006, 15h06   #6
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2008, 08h39   #7
Candidat au titre de Membre du Club
 
Inscription : novembre 2007
Messages : 21
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 21
Points : 14
Points : 14
Par défaut ko en pagination

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.
CobolProgrammator est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h23.


 
 
 
 
Partenaires

Hébergement Web