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 :

Index et colonne nulle


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 140
    Par défaut Index et colonne nulle
    Bonjour
    J'ai un index idx(c1,c2,c3) dans une table T.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select ...from T where c1='A' and c2 is null and c3<10
    Mon index est B*Tree classique donc ne stocke pas les valeurs NULL.
    Comment mon index va être utilisé dans ce cas ? Est-il performant ?
    Et surtout la colonne c2 ?
    Merci !

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Par défaut
    Bonjour,

    Les lignes sont indexées dès qu'une des colonnes de l'index n'est pas nulle.
    Une ligne dont vos 3 colonnes c1, c2, c3 sont nulles ne seront pas indexées, les autres si. Les lignes correspondant à votre prédicat seront donc indexées et l'optimiseur utilisera l'index pour les trouver (si cela lui parait plus intéressant qu'un Full Table Scan évidemment).

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    bonjour,

    Je vois deux options à ce problème :
    - indexer seulement c1 et c3 (index range scan puis test des lignes pour la condition sur c2)
    - selon le type / valeurs de c2 vous pourriez faire un bricolage du genre COALESCE(c2, -1) et indexer cette fonction : create index idx on ma_table(c1, COALESCE(c2, -1), c3). Il faudrait changer la clause where du coup.

  4. #4
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 140
    Par défaut
    merci pour vos retours.

    Pour résumer , une ligne ne sera indexée que si une des 3 colonnes est non nulle :
    Si les 3 colonnes sont toutes NULLES => ligne non indexée.

    Z.

  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
    Oui c’est ça. Mais ensuite pour que l’index soit utilisé l’optimiseur doit être certain que la colonne qui porte une valeur dans la requête est toujours présente dans l’index.

  7. #7
    Membre Expert

    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
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Mais ensuite pour que l’index soit utilisé l’optimiseur doit être certain que la colonne qui porte une valeur dans la requête est toujours présente dans l’index.
    Mnitu,

    Je ne comprends pas très bien la phrase ci-dessus. Peux tu donner un exemple?

    D'avance merci

  8. #8
    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 Mohamed.Houri Voir le message
    Mnitu,

    Je ne comprends pas très bien la phrase ci-dessus. Peux tu donner un exemple?
    Oui c’est confus et très mal formulé!
    Dans l’exemple pointé sur le lien indiqué ci-dessus laissez la colonne owner nullable. Maintenant la requête de l'exemple ne peux plus utiliser l'index.

Discussions similaires

  1. composite-id et colonnes nulles
    Par mitje dans le forum Hibernate
    Réponses: 15
    Dernier message: 16/07/2007, 14h34
  2. Vérifier si colonne nulle dans résultat requete
    Par ouiskie dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/03/2007, 07h45
  3. [2.0] Colonne nulle d'une table - Ajout de DataRow via BindingNavigator
    Par sundjata dans le forum Accès aux données
    Réponses: 5
    Dernier message: 16/11/2006, 03h23
  4. indexer les colonnes de type TEXT
    Par Bourak dans le forum Outils
    Réponses: 3
    Dernier message: 09/05/2006, 16h02
  5. Comment faire un count de colonnes null
    Par claralavraie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/01/2006, 14h13

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