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 :

optimisation de performance


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Par défaut optimisation de performance
    Bonjour,

    J'ai une petite question :

    Quel est la requête la plus efficace?

    1/ Select * from ma_table where code IN ('INDIVIDUEL','INDIVIDUEL US','INDIVIDUEL ETR')

    2/ Select * from ma_table where code like ('INDIV%')

    Merci de votre réponse.

    NB : Je n'ai rien d'autre qui commence par INDIV et je veux bien ces 3 types de code là.

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    sans doute le LIKE qui employera un INDEX RANGE SCAN, mais le IN est plus précis...

  3. #3
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Par défaut
    qu'est ce que tu entends par plus precis??

    Le fait de prendre uniquement les valeurs que l'on veut? ou autre chose?

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    oui, le jour ou quelqu'un à l'idée d'entrer le code INDIVISIBLE, ça ne plante pas ton code

  5. #5
    Membre averti
    Inscrit en
    Décembre 2006
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 20
    Par défaut
    OK merci!

    Je vais voir si les codes évoluent beaucoup ou pas dans ce cas là.

    Car s'il y a un nouveau code du genre indivisible, soit je modifie le code SQL en dur, soit je dois faire attention que les codes bougent pas trop pour planter mon code...

    Merci beaucoup pour les renseignements et la rapidité!

    A+
    Danzel

  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
    Citation Envoyé par laurentschneider Voir le message
    sans doute le LIKE qui employera un INDEX RANGE SCAN, mais le IN est plus précis...
    Salut Laurent,
    Peux-tu développer un peu?
    La requête 1 peut faire un UNIQUE SCAN et à la limite aussi un RANGE SCAN.

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    aussi un RANGE SCAN? pas trop logique non...

    like 'INDIV%'

    c'est comme

    between 'INDIV' and 'INDIVÿÿÿÿÿÿÿÿ'

    mais la requete 1, c'est plutot un INLIST, non?

    bon, si tu as un exemple

  8. #8
    Membre chevronné Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Par défaut
    Requete 1 : INLIST+RANGE SCAN
    Requete 2 : RANGE SCAN
    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
    53
    54
    55
    56
    57
    SQL> create index ename_idx on emp(ename);
     
    Index created.
     
    SQL> set pages 150
    SQL> set lines 150
    SQL> explain plan for select * from emp where ename in ('ALLEN','ADAMS');
     
    Explained.
     
    SQL> select * from table(dbms_xplan.display);
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------------------
    Plan hash value: 2793362507
     
    ------------------------------------------------------------------------------------------
    | Id  | Operation                    | Name      | Rows  | Bytes | Cost (%CPU)| Time     |
    ------------------------------------------------------------------------------------------
    |   0 | SELECT STATEMENT             |           |     2 |    74 |     2   (0)| 00:00:01 |
    |   1 |  INLIST ITERATOR             |           |       |       |            |          |
    |   2 |   TABLE ACCESS BY INDEX ROWID| EMP       |     2 |    74 |     2   (0)| 00:00:01 |
    |*  3 |    INDEX RANGE SCAN          | ENAME_IDX |     2 |       |     1   (0)| 00:00:01 |
    ------------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       3 - access("ENAME"='ADAMS' OR "ENAME"='ALLEN')
     
    15 rows selected.
     
    SQL> explain plan for select * from emp where ename like 'A%';
     
    Explained.
     
    SQL> select * from table(dbms_xplan.display);
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------------------
    Plan hash value: 2063514001
     
    -----------------------------------------------------------------------------------------
    | 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          | ENAME_IDX |     1 |       |     1   (0)| 00:00:01 |
    -----------------------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
    ---------------------------------------------------
     
       2 - access("ENAME" LIKE 'A%')
           filter("ENAME" LIKE 'A%')
     
    15 rows selected.
    Nicolas.

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    merci Nicolas. Oui, un range scan + un inlist.

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

Discussions similaires

  1. Optimiser les performances try/catch ?
    Par KiLVaiDeN dans le forum Langage
    Réponses: 4
    Dernier message: 14/01/2014, 13h47
  2. Réponses: 13
    Dernier message: 18/07/2011, 17h24
  3. Optimisation des performances
    Par GLSpirit dans le forum C++
    Réponses: 14
    Dernier message: 12/05/2007, 14h18
  4. Optimisation et performance
    Par dinozor29 dans le forum Langage
    Réponses: 5
    Dernier message: 10/01/2006, 16h01
  5. Réponses: 2
    Dernier message: 29/08/2005, 16h12

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