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 :

[9i] FULL TABLE SCAN sur colonne entrant dans la PK


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut [9i] FULL TABLE SCAN sur colonne entrant dans la PK
    Salut,

    Soit la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE TABLE ARF_TEMP_myIds(INSTANCEID VARCHAR2(44));
    ALTER TABLE ARF_TEMP_myIds ADD CONSTRAINT PK_MYIDS PRIMARY KEY (INSTANCEID);
    mes jointures avec cette table me font systématiquement un full scan et je ne comprends pas pourquoi. Est-ce que cela veut aussi dire que l'index ne sert à rien ?

    Merci

    edit : je précise qu'elles sont "conventionnelles" c'est à dire de type where A = B

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Non, ça veut dire qu'Oracle a décidé de ne pas aller lire l'index suivant les paramètres de l'optimiseur.

    1/ Les stats sont elles à jour ?
    2/ La table est elle grosse (parce que sinon c'est plus simple de monter toute la table en mémoire)
    3...

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    ah bien vu, je créé à la volée la table et l'index donc aucune stat n'est à jour.

    Cependant je sais à tout moment le compte de la table, puis-je forcer le compilateur à une cardinalité donnée ? il me semble avoir vu passer une syntaxe avec "(cardinalité)" ...

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je n'ai pas compris ta notion de cardinalité.

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    et bien puisque l'optimiseur n'a pas de statistiques au moment des requêtes, ne pourrais-je pas les lui spécifier ? (contenu de la table à l'instant t)

    /*+ CARDINALITY (100) */

    par exemple ... Il faut que je bosse mon pl/sql ><


    edit : je suis sous 9i !!!

  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
    Je n'ai pas calculé les statistique dans mon exemple et l'index est utilisé (la tables est vide).
    Peut tu mieux expliquer quel est ton problème ?
    Sinon il y a un hint SQL concernant la cardinalité mais est-ce que t'a vraiment besoin ?

  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
    Il faut ajouter quelques détails.
    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
     
    Explain plan for 
    Select * 
    from ARF_TEMP_myIds a join ARF_TEMP_myIds b using (INSTANCEID)
    /
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
     
    -------------------------------------------------------------------------
    | Id  | Operation            |  Name       | Rows  | Bytes | Cost (%CPU)|
    -------------------------------------------------------------------------
    |   0 | SELECT STATEMENT     |             |    82 |  3936 |     4   (0)|
    |   1 |  NESTED LOOPS        |             |    82 |  3936 |     4   (0)|
    |   2 |   INDEX FULL SCAN    | PK_MYIDS    |    82 |  1968 |    26   (0)|
    |*  3 |   INDEX UNIQUE SCAN  | PK_MYIDS    |     1 |    24 |            |
    -------------------------------------------------------------------------
     
    Predicate Information (identified by operation id):
     
    PLAN_TABLE_OUTPUT
    --------------------------------------------------------------------------------
    ---------------------------------------------------
     
       3 - access("A"."INSTANCEID"="B"."INSTANCEID")

Discussions similaires

  1. Réponses: 18
    Dernier message: 10/07/2015, 14h24
  2. Réponses: 20
    Dernier message: 24/02/2010, 17h14
  3. Réponses: 4
    Dernier message: 09/06/2008, 17h35
  4. Réponses: 2
    Dernier message: 08/11/2007, 10h54
  5. Réponses: 2
    Dernier message: 08/11/2007, 10h54

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