Bonjour,
Voici le code d'une procédure stockée
On voit que la pluspart des requetes demandent un classement par date desc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52 /* Params ------ <param> : <purpose> */ declare variable trbn char(4); declare variable num_trbn integer; declare variable dt_ok timestamp; declare variable dt_arret timestamp; begin num_trbn=1; /*Parcours des turbines */ while (num_trbn<=NB_TURBINE) do begin REF_TURBINE_VALOREM=''; trbn='T'||cast(num_trbn as varchar(2)); /*recupere les dernieres infos dans la table status où le numéro de groupe est différent de 25*/ select first 1 S.REF_TURBINE_VALOREM,S.CODE_STATUS,S.NOM_STATUS,C.COULEUR_MARQUEUR from STATUS S inner join CONFIG_STATUS C on C.CODE_STATUS=S.CODE_STATUS and S.NOM_PROJET=:PRJT and S.REF_TURBINE_VALOREM=:trbn and C.NOM_PROJET=:PRJT and C.NUM_GROUPE<>'25' order by DEBUT_STATUS desc into :REF_TURBINE_VALOREM,:CODE_STATUS,:NOM_STATUS,:COULEUR; /*récupere la couleur correspondant au code status */ /*select COULEUR_MARQUEUR from CONFIG_STATUS where CODE_STATUS=:CODE_STATUS and NOM_PROJET=:PRJT into :COULEUR; */ /*si le code status n'est pas 0 il faut rechercher le dernier arret pour voir si la machine */ /*ne devrait tuojours pas etre dans cet état car elle n'aurait pas redémarré (status OK) */ if (CODE_STATUS<>'0') then begin /*recherche du 1er arret */ select first 1 DEBUT_STATUS from STATUS where FAMILLE_CALC_MAIN_COURANTE='ARRET' and NOM_PROJET=:PRJT and REF_TURBINE_VALOREM=:trbn order by DEBUT_STATUS desc into :dt_arret ; /*recherche du 1er OK */ select first 1 DEBUT_STATUS from STATUS where CODE_STATUS='0' and NOM_PROJET=:PRJT and REF_TURBINE_VALOREM=:trbn order by DEBUT_STATUS desc into :dt_ok; /*si la date de l'arret et plus récente que le status OK alors on imporse la couleur orange */ if (dt_ok<dt_arret) then COULEUR='ORANGE'; end /*recupere les dernieres infos dans la table data 10 min */ select first 1 DATE_HEURE, PUISS_ACTIVE_PRODUITE,VITESSE_VENT_NACELLE from DATA_10MIN where NOM_PROJET=:PRJT and REF_TURBINE_VALOREM=:trbn order by DATE_HEURE desc into :DT_HR,:PRODUCTION,:VIT_VENT; if (REF_TURBINE_VALOREM='') then REF_TURBINE_VALOREM=trbn; suspend; num_trbn=num_trbn+1; end/*fin du parcours des turbines */ end
Ce que je ne comprends pas c'est que quelque soit ma facon de créer l'index (ASC ou DESC)
ma procédure prend le meme temps (environ 8sec)
Code : Sélectionner tout - Visualiser dans une fenêtre à part CREATE DESC INDEX I_STATUS_DEBUT_STATUS ON STATUS (DEBUT_STATUS);
Or si j'execute les requetes une à une je vais quasiment 10 fois plus vite !!
Il y a sans aucun doute quelque chose que je dois mal faire mais où??
Merci
Partager