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

SQL Oracle Discussion :

[8i] optimisation de requete


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Par défaut [8i] optimisation de requete
    Bonjour,

    Je rencontre un problème avec l'utilisation d'un progiciel qui génère des requêtes de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select mesures0_.MESURE_CODE as MESURE_C1_, mesures0_.MESURE_LIBELLE as
      MESURE_L2_, mesures0_.MESURE_ACTIVE as MESURE_A5_, mesures0_.ICOMMENT as
      ICOMMENT, mesures0_.MESURE_TYPE as MESURE_T4_, mesures0_.NATURE_RISQUE as
      NATURE_R6_, mesures0_.RISQUE_CODE as RISQUE_C7_
    from
     MESURES mesures0_ where (NATURE_RISQUE IS NOT NULL)AND(MESURE_LIBELLE LIKE
      'Obligation d''un triangl%')AND(RISQUE_CODE='A')
    Lorsque je fais un explain plan je constate un FTS sur la table MESURES (330.000 enregistrements) ce qui n'est pas énorme.

    Je pense que le problème vient de la clause LIKE mais je ne sais pas trop comment faire ..

    Merci pour votre aide

    Bonne fin de journée,
    Alain

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Combien de lignes doit retourner la requête ?

    Essayez de rajouter un index sur (RISQUE_CODE, MESURE_LIBELLE).

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Que est-ce que vous avez comme index sur la table en question ?

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2006
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 76
    Par défaut
    Ceci est aussi possible:
    Pb de perf sur des grands champs avec l'opérateur like.
    http://www.dba-oracle.com/oracle_tip..._sql_index.htm

    Voir l'article de Laurent Schneider.
    http://laurentschneider.com/wordpres...me-likebc.html

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    283
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 283
    Par défaut
    Bonjour,

    Merci pour vos réponse, j'ai déjà un index sur la colonne RISQUE_CODE et je pense que la réponse réside dans l'article pointé par boutade80 :

    http://www.dba-oracle.com/oracle_tip..._sql_index.htm

    Je n'ai jamais utilisé ce type d'index, je vais creuser un peu le sujet afin de savoir s'il n'y a pas d'effet de bord.

    Savoir par exemple si les requêtes doivent être réécrites car j'ai cru comprendre que l'utilisation de ce type d'index nécessitait l'utilisation du mot clef 'CONTAINS' à la place du mot clef 'LIKE'.

    Merci bien,
    Alain

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Like '%ABC%' n'est pas la même chose que like 'ABC%'.
    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
     
    SQL> set autotrace traceonly explain
    SQL> select * from emp where ename like 'ABC%';
     
    Plan d'exÚcution
    ----------------------------------------------------------
    Plan hash value: 2765129497
     
    --------------------------------------------------------------------------------------
     
    | Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
     
    --------------------------------------------------------------------------------------
     
    |   0 | SELECT STATEMENT            |        |     1 |    37 |     2   (0)| 00:00:01 |
     
    |   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    37 |     2   (0)| 00:00:01 |
     
    |*  2 |   INDEX RANGE SCAN          | IX_EMP |     1 |       |     1   (0)| 00:00:01 |
     
    --------------------------------------------------------------------------------------
     
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       2 - access("ENAME" LIKE 'ABC%')
           filter("ENAME" LIKE 'ABC%')
     
    SQL> select * from emp where ename like '%ABC%';
     
    Plan d'exÚcution
    ----------------------------------------------------------
    Plan hash value: 3956160932
     
    --------------------------------------------------------------------------
    | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
    --------------------------------------------------------------------------
    |   0 | SELECT STATEMENT  |      |     1 |    37 |     3   (0)| 00:00:01 |
    |*  1 |  TABLE ACCESS FULL| EMP  |     1 |    37 |     3   (0)| 00:00:01 |
    --------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       1 - filter("ENAME" LIKE '%ABC%')
     
    SQL>

Discussions similaires

  1. Optimisation de requete
    Par Scorff dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 11/07/2005, 09h59
  2. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09
  3. Optimiser une Requetes SQL sous ASP
    Par NeHuS dans le forum ASP
    Réponses: 8
    Dernier message: 18/04/2005, 16h26
  4. Optimisation de requete
    Par cyril dans le forum SQL
    Réponses: 3
    Dernier message: 09/10/2003, 08h57
  5. Optimisation des requetes
    Par bifidus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/10/2003, 11h29

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