IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration Oracle Discussion :

Pb de perf avec upper


Sujet :

Administration Oracle

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut Pb de perf avec upper
    Bonjour,
    j'ai un petit souci avec un upper, je décrit rapidement le contexte. Voila j'ai une fenetre general de recherche et en fonction d'uncontexte applicatif on permet different type de recherche, mais construit avec une requete generique.
    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
     
    SELECT cau.num_cli
    	 ,cau.num_aff
    	 ,cau.cod_act
    	 ,cau.cod_bnf
    	 ,cau.num_cli || '/' || cau.num_aff 
    	  ,eta.num_etaci 
    	  ,cau.cod_refext 
    	  ,usr.lib_nomusr 
    	  ,bnf.lib_bnf 
    	  ,cli.lib_nom 
    	  ,cli.lib_prenomcli 
    	  ,eta.cod_pstvileta
    	  ,eta.lib_vileta 
    	  ,cau.dat_debact 
    	  ,cau.dat_debcau 
    	  ,cau.dat_arccau 
    FROM   op.t_clients        cli
          ,op.tr_beneficiaires bnf
    	 ,op.tr_utilisateurs  usr
    	 ,op.t_etablissements eta
    	 ,op.t_affaires       aff
    	 ,op.t_cautionnements cau
    WHERE  upper(cli.lib_nom) = 'TOTO' AND cli.num_cli = aff.num_cli AND cli.num_cli = cau.num_cli AND
    	  aff.num_eta = eta.num_eta AND aff.num_cli = cau.num_cli AND aff.num_aff = cau.num_aff AND
    	  cau.cod_bnf = bnf.cod_bnf AND usr.cod_usr(+) = cli.cod_usrgst
    Cette requete est lente environ 2.5 sec. Par contre la meme sans le upper
    est à 0.05 sec

    voici une requete instantané mais avec un upper.
    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
     
    SELECT cli.num_cli 
    	  ,usr.lib_nomusr 
    	  ,cli.lib_nom 
    	  ,cli.lib_prenomcli 
    	  ,cli.cod_pst 
    	  ,cli.lib_vilcli 
    	  ,cli.lib_raiscl 
    	  ,cli.cod_typrspscl 
    	  ,decode(cli.cod_eta,
    		    'C',
    		    'Courant',
    		    decode(cli.cod_eta, 'A', 'Archivé', decode(cli.cod_eta, 'I', 'Informatisé', ''))) 
    FROM   op.tr_utilisateurs usr, op.t_clients cli
    WHERE  upper(cli.lib_nom) = 'TOTO' AND usr.cod_usr(+) = cli.cod_usrgst
    Voila donc je ne peux pas laisser ce petit upper comme cela .
    Donc si quelqu'un avait une idée, je suis preneur.

    MErci

  2. #2
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Ajoutez un index de fonction sur upper (lib_nom)

    au fait, quelle est votre version Oracle ?

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    Ma version d'oracle est la 8i

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    J'ai déjà un index sur cli.nom, dont voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    create index IDX_CLI_NOM on T_CLIENTS (LIB_NOM)
      tablespace INDEX_1
      pctfree 10
      initrans 2
      maxtrans 255
      storage
      (
        initial 2320K
        next 1120K
        minextents 1
        maxextents 505
        pctincrease 50
      );
    Quand t'entends tu par index de fonction car je ne connais pas
    J'ai regardé dans la doc et pour l'instant je ne trouve pas mais je continue les fouilles...
    Merci pour ton aide

  5. #5
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Vous créez un index de fonction avec la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Create index nom_index on ma_table (upper(ma_colonne));

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    merci sheikYerbouti, j'ai appris que l'on pouvait faire ce type d'index par contre cela ne change rien au temps de réponse.
    J'essaye en enlevant le premier index sur lib_nom, mais malheureusement toujours pas
    Aurais tu une idée?

  7. #7
    Expert confirmé
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Par défaut
    Forcément cela change, puisque l'index, cette fois est utilisé !

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 102
    Par défaut
    J'aurais moi aussi pensez que cela aurais changer quelque chose mais ce n'est pas le cas, mais l'explication se trouve peut-etre dans les données car elles sont déjà toutes en masjuscule et je ne l'avait pas vu donc l'index upper(lib_nom) alors que lib_nom est déjà en masjuscule n'a pas de sens.

    Merci, mon probleme est résolu.
    Et encore merci pour l'index sur les fonctions.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/09/2008, 16h08
  2. Réponses: 17
    Dernier message: 08/07/2005, 07h46
  3. Probleme de perf avec File::Find::name;
    Par Ludo167 dans le forum Modules
    Réponses: 6
    Dernier message: 14/07/2004, 11h31
  4. problème avec UPPER
    Par r-zo dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/09/2003, 11h53
  5. problème avec UPPER
    Par r-zo dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 17/09/2003, 11h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo