Bonjour à tous !
Voilà près de 3 ans que je n’ai rien posté (je sévissais plutôt sur le forum Delphi, hé oui, les questions débiles, c’était moi !) mais je n’ai jamais cessé de visiter ce forum et d’apprendre !
![]()
Etant complètement newbie en PL/SQL et ayant un besoin urgemment urgent pour le boulot, je me permets de venir chercher vos lumières sur une question d’optimisation de requête SQL :
J’ai défini un curseur comme ceci :
Les paramètres « param1 » et « param2 » sont des variables globales (je sais c’est pas beau !).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CURSOR MonCurseur IS SELECT distinct T1_ch1, T1_ch2, T1_ch3 --- 3 champs de la table T1 FROM T1, T2, T3, T4 --- 4 tables WHERE T2_ch1 like param1 || '_' --- jointures diverses entre les champs des tables and T3_ch1 = param2 and T4_ch2 = T3_ch2 and T1_ch2 = T4_ch2 and T2_ch3 = T1_ch3;
Le champ «T2_ch1» doit prendre la forme suivante : ‘CE01x’ où x peut prendre les valeurs 0, 1, 2 à 9, d’où leoù param1 est un varchar2.
Code : Sélectionner tout - Visualiser dans une fenêtre à part like param1 || _
Mon programme et cette requête marchent très bien, mais le hic c’est que ma requête est super gourmande (temps d’exécution 800ms à 3 secondes) et elle est appelée 18 000 fois (pour chaque couple (param1,param2)) : mon programme tourne du coup pendant plus de 2 heures !
A première vue et après quelques tests, c’est la clause « where/like » qui serait coûteuse.
Qu’en pensez-vous ?
J’ai essayé d’optimiser avec « where/in » pas très concluant :
Existe-t-il un moyen d’optimiser considérablement ma requête ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 WHERE T2_ch1 in (param1|| '0', param1 || '1', param1 || '2', param1 || '3', param1 || '4', param1 || '5', param1 || '6', param1 || '7', param1 || '8', param1 || '9')
Suis-je à côté de la plaque ? (c'est tout à fait possible aussi)
Etant novice sur ce sujet, toute aide serait la bienvenue et je vous en remercie d’avance !![]()
Quelques infos au cas où :
Je travaille sous Toad 7.4, Oracle 9i.
- seul le champ « T3_ch1 » n’est pas indexé
Tailles approximatives des tables :
- T1 : 75 000
- T2 : 15 000
- T3 : 30 000
- T4 : 30 000
Ce qui n'est pas énorme non?![]()
Partager