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 :

Mauvais choix d'index [12c]


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Points : 21
    Points
    21
    Par défaut Mauvais choix d'index
    Bonjour,

    Utilisation de Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

    Je cherche à comprendre pourquoi Oracle choisit d'utiliser un index range scan en utilisant l'index IDX_ZCGSMCLA (SAB_MBR,CGSMCLETA,CGSMCLDAD,CGSMCLDAF,ID) alors que la clause where de ma requête correspondant à l'index IDX_ZCGSMCLB (SAB_MBR,CGSMCLETA,CGSMCLFIC,CGSMCLCLI,CGSMCLMOI,CGSMCLLIG) lui permettant de faire une index unique scan.4

    Oracle choisit, une fois sur 3 le mauvais plan d'exécution à travers l'index IDX_ZCGSMCLA alors que tous les critères de la clause where permettent qu'il utilise un index unique scan via l'index IDX_ZCGSMCLB.

    La clause where de ma requête s'effectue sur l'ensemble des colonnes de ma table

    Plan d'exécution et requête en pièce jointe

    L'utilisation du mais index IDX_ZCGSMCLA entraîne une forte consommation CPU


    Merci de vos éclaircissements

    Index_GCS.docx

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 957
    Points : 4 386
    Points
    4 386
    Par défaut
    Postez l'attachement en TEXT only.

    Disable de l'index IDX_ZCGSMCLA
    Refresh des stats
    Réexaminez les résultats et regardez si des queries sont pénalisés par l'absence de IDX_ZCGSMCLA


  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Bonjour

    C'est vrai que l'index unique est le plus approprié dans cette situation puisqu'il couvre 6 clause "where" alors que l'autre index n'en couvre que 4.

    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
    WHERE
            sab_mbr   = :23 -- idx unique, idx range
        AND cgsmcleta = :24 -- idx unique, idx range
        AND cgsmclfic = :25 -- idx unique
        AND cgsmclcli = :26 -- idx unique
        AND cgsmcldad = :27 -- idx range
        AND cgsmcldaf = :28 -- idx range
        AND cgsmcllig = :29 -- idx unique
        AND cgsmclabl = :30
        AND cgsmclmoi = :31 -- idx unique
        AND cgsmclage = :32
        AND cgsmclrsp = :33
        AND cgsmclgrp = :34
        AND cgsmclrs1 = :35
        AND cgsmclrs2 = :36
        AND cgsmclrs3 = :37
        AND cgsmclrs4 = :38
        AND cgsmclrs5 = :39
        AND cgsmclrs6 = :40
        AND cgsmcledt = :41
        AND cgsmclcum = :42
        AND cgsmclori = :43
        AND cgsmcltyp = :44
        AND cgsmclsen = :45
    Par contre, vous remarquerez que le cout de l'utilisation des deux indexes est le même : 1

    Dans ce cas, à votre place, je changerai le nom de l'index UNIQUE pour le rendre premier dans l'ordre alphabetique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter index IDX_ZCGSMCLB rename to A_IDX_ZCGSMCLB ;
    Bien Cordialement
    Mohamed Houri

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 995
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 995
    Points : 2 501
    Points
    2 501
    Par défaut
    A priori, de ce que j'ai lu dans la pièce jointe, le coût est le même pour Oracle en faisant un Unique Scan ou un Range Scan : coût de 1.
    Donc je ne suis pas sur que vouloir changer le comportement du CBO soit très efficace sur cette requête.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    merci pour vos retours, si je comprends lorsque le coût est le même Oracle choisi le premier index par ordre alphabétique ou aléatoirement ?

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

Discussions similaires

  1. Mauvais choix d'indexation
    Par joujousagem2006 dans le forum Administration
    Réponses: 6
    Dernier message: 13/10/2014, 19h29
  2. champs vides volontaire mauvais choix ?
    Par Overstone dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/06/2008, 14h29
  3. FOD au CNAM, mauvais choix ?
    Par bipbip2006 dans le forum Etudes
    Réponses: 3
    Dernier message: 10/05/2008, 16h14
  4. Choix des index dans tables sans clés étrangères ?
    Par ctobini dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/01/2008, 09h56
  5. Choix d'index
    Par User dans le forum Access
    Réponses: 2
    Dernier message: 09/09/2005, 21h16

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