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 :

Création d'index incohérent


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut Création d'index incohérent
    Bonjour à tous

    J'utilise ORACLE 9i.
    J'ai une table que je remplis avec un million de lignes. Sur cette table, je n'ai pas créé (encore d'index) ni fait d'analyse.
    Je crée ensuite un index (sans analyse).
    Lorsque j'exécute une requête devant prendre l'index (pas de doute possible), elle ne le prend pas.
    Je supprime l'index puis le recrée (avec le même script), là, la requête prend l'index.

    Petit détail : à aucun moment, je n'ai analysé la table ou l'index.
    Je ne souhaite pas faire d'analyse des objets (je suis dans le cadre d'une étude qui cherche à valider l'intérêt d'une analyse systématique des objets).

    Pourquoi le premier index n'est-il pas "correct" ?

  2. #2
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    sans code ni explain plan, il va être difficile de répondre

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par Robinson8171 Voir le message
    Petit détail : à aucun moment, je n'ai analysé la table ou l'index.
    Je ne souhaite pas faire d'analyse des objets (je suis dans le cadre d'une étude qui cherche à valider l'intérêt d'une analyse systématique des objets).
    donc tu es en mode RULE donc l'ordre des tables et des colonnes est important... évidemment ce genre de pratique est à proscrire, Oracle n'appréciant guère le mélange avec et sans stats

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut
    Citation Envoyé par orafrance Voir le message
    donc tu es en mode RULE donc l'ordre des tables et des colonnes est important... évidemment ce genre de pratique est à proscrire, Oracle n'appréciant guère le mélange avec et sans stats
    Non, je suis en mode CHOOSE et je travaille SANS aucune analyse.

  5. #5
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    donc tu es en RULE

    pas de stats = RBO... si ton appli n'impose pas ce mode c'est une très mauvaise idée

  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 orafrance Voir le message
    donc tu es en RULE

    pas de stats = RBO... si ton appli n'impose pas ce mode c'est une très mauvaise idée
    En 9I je ne pense pas que c'est vrai
    Comment faites-vous pour savoir que votre requête ne prends pas l'index ?
    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
     
    SQL> alter session set optimizer_mode=CHOOSE;
     
    Session modifiée.
     
    SQL> set autotrace traceonly explain
    SQL> create table titi as select * from big_table;
     
    Table créée.
     
    SQL> create index ix_titi on titi (owner, object_name);
     
    Index créé.
     
    SQL> select * from titi where owner='MNI';
     
    Plan d'exécution
    ----------------------------------------------------------
       0      SELECT STATEMENT Optimizer=CHOOSE
       1    0   TABLE ACCESS (BY INDEX ROWID) OF 'TITI'
       2    1     INDEX (RANGE SCAN) OF 'IX_TITI' (NON-UNIQUE)
     
     
     
    SQL>

  7. #7
    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 mnitu Voir le message
    En 9I je ne pense pas que c'est vrai
    Non mais quelle connerie j'ai dit
    CHOOSE
    The optimizer chooses between a cost-based approach and a rule-based approach, depending on whether statistics are available. This is the default value.

    If the data dictionary contains statistics for at least one of the accessed tables, then the optimizer uses a cost-based approach and optimizes with a goal of best throughput.
    If the data dictionary contains only some statistics, then the cost-based approach is still used, but the optimizer must guess the statistics for the subjects without any statistics. This can result in suboptimal execution plans.
    If the data dictionary contains no statistics for any of the accessed tables, then the optimizer uses a rule-based approach.

  8. #8
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Citation Envoyé par mnitu Voir le message
    En 9I je ne pense pas que c'est vrai
    Je ne raconte pas toujours n'importe quoi

    http://download.oracle.com/docs/cd/B...mops.htm#38218
    CHOOSE


    The optimizer chooses between a cost-based approach and a rule-based approach, depending on whether statistics are available. This is the default value.

    * If the data dictionary contains statistics for at least one of the accessed tables, then the optimizer uses a cost-based approach and optimizes with a goal of best throughput.
    * If the data dictionary contains only some statistics, then the cost-based approach is still used, but the optimizer must guess the statistics for the subjects without any statistics. This can result in suboptimal execution plans.
    * If the data dictionary contains no statistics for any of the accessed tables, then the optimizer uses a rule-based approach.
    CHOOSE sans stats = RULE... sauf éventuellement avec l'autosampling mais j'en suis même pas sûr

    Edit : argh... grillé

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 6
    Par défaut Problème avec CHOOSE / RULE / ...
    Je vois ce que tu veux me dire, mais j'ai (pardon) un peu de mal à tout saisir.
    Lorsque j'exécute ma requête (select en jointure que ma table et sur une autre de 15 millions de lignes), j'ai le plan d'exécution suivant :
    Operation Object Name Rows Bytes Cost Object Node In/Out PStart PStop

    SELECT STATEMENT Optimizer Mode=CHOOSE 522 K 13391
    SORT ORDER BY 522 K 42 M 13391
    MERGE JOIN 522 K 42 M 6320
    SORT JOIN 14 M 576 M 42
    PARTITION RANGE ALL 1 17
    INDEX FULL SCAN HB_ETOIL_IN.IX_DWR_F_ELM_PASSAGE_TP_PK 14 M 576 M 42 1 17
    SORT JOIN 840 K 34 M 6278
    TABLE ACCESS FULL HB_ETOIL_IN.TT_F_ELM_PASSAGE_TP 840 K 34 M 2
    La table incriminée est TT_F_ELM_PASSAGE_TP (1 millions de lignes).

    L'explain plan indique bien que le mode est CHOOSE... d'où mon incompréhension

Discussions similaires

  1. [DBF]Comment afficher progression de création d'index?
    Par fruaud dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 28/12/2005, 11h38
  2. Réponses: 15
    Dernier message: 16/08/2005, 14h43
  3. Stratégie de création d'indexes
    Par nosnoss dans le forum Oracle
    Réponses: 6
    Dernier message: 01/07/2005, 10h37
  4. Création d'index sur un TTable
    Par bencot dans le forum Bases de données
    Réponses: 3
    Dernier message: 09/03/2005, 13h23
  5. Création d'Index
    Par viny dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/12/2003, 13h20

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