[ ZeD ] Désigné volontaire | salut,
j'ai un problème de lenteur avec la requête suivante :
Code :
- SELECT DISTINCT
- t.TOUR_DATE AS jour, t.TOUR_DESTINATAIRE AS destinataire, t.TOUR_NUMERO AS tournee, Get_Nomtech(t.TOUR_IDTECH) AS technicien, Get_Etat_Tournee(t.TOUR_ETAT) AS etat, Nb_Statuttgc(t.TOUR_ID, '0') AS ok, Nb_Statuttgc(t.TOUR_ID, '1') AS nok, Nb_Statuttgc(t.TOUR_ID, '3') AS inc, Nb_Statuttgc(t.TOUR_ID, '2') AS rendus
- FROM TOURNEES_SVR t
- WHERE t.TOUR_DATE>='01/03/04' AND t.TOUR_DATE<='28/04/04' AND t.TOUR_ETAT>0 AND t.TOUR_IDSITE='SAR'
- ORDER BY t.TOUR_DATE DESC;
|
la requête dure 7 secondes pour 40 lignes retournées, ce qui me paraît plutôt énorme...
j'ai remarqué que ce qui prenait le plus de temps c'était les procédures stockées mais elles ont l'air classiques:
Code :
- FUNCTION Nb_Statuttgc(idtournee NUMBER, statut NUMBER)
- RETURN NUMBER
- AS
- nb NUMBER;
- BEGIN
- SELECT COUNT(*) INTO nb FROM BI_SVR b WHERE b.BI_TOURNEEREELLE=idtournee AND b.BI_ETAT='T' AND b.BI_STATUTTGC=statut;
- RETURN (nb);
- END Nb_Statuttgc;
|
donc question : est-ce que l'utilisation des procédures stockées dans un select est à bannir ?
j'ai aussi remarqué que les tables ne disposaient que de très peu d'indexes et d'aucune clé étrangère, est-ce que le fait d'en mettre va accélérer la requête au point de lui faire gagner 6 secondes ?
merci d'avance. |