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 :

Comment ordonner les colonnes dans un indexe


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Par défaut Comment ordonner les colonnes dans un indexe
    Bonjour,

    Je travaille sur une base oracle 9I

    je désire savoir dans quel ordre il faut mettre les colonnes pour construire un indexe. Faut-il d'abord mettre les colonnes qui contiennent les plus de valeurs différentes ou celles qui contiennent le moins de valeurs.

    D'instinct, je dirais "celle qui contienne le plus de valeurs différentes" ce qui a l'air de se vérifier avec les tests que j'ai fait.

    quelqu'un saurait-il confirmer çà et cerise sur le gâteau me dire pourquoi cela fonctionne comme cela.

    Merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Par défaut
    Je te confirme.
    L'explication est que au plus ton premier critère permet d'éliminer d'enregistrements, au plus ce sera rapide pour le seconde de finir le travail parmi les enregistrements restants. Et ainsi de suite...

    Exemple d'école : si tu veux trouver dans la liste du personnel les dénommés "toto" qui touchent plus de 1000 euro, il vaut mieux chercher d'abord les quelques homonymes du nom de "toto", puis déterminer parmi eux ceux qui gagnent plus de 1000 euro.
    Si tu cherches d'abord ceux qui gagnent plus de 1000 euro, ça devrait de ramener quasiment tout le monde (enfin j'espère ), et donc tu repartirais ensuite quasiment de 0 pour déterminer ceux qui s'appellent "toto" (dans ce genre de cas, l'utilisation de l'index peut même s'avérer pire que sa non-utilisation, car on estime en moyenne que si une requête ramène plus de 20% des enregistrements d'une table, utiliser un index sera plus coûteux que ne pas l'utiliser)

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 270
    Par défaut
    Tout dépend de tes criteres de recherche, de l'utilisation que tu fais de ton index.

    Comme une requette peut toujours utiliser la partie initiale d'un index multi colonnes, met en premier les colones qui se trouvent dans tes clauses where...
    Sauf si ces parties initiales sont si peu discriminantes qu'il n'est pas souhaitable de passer par un index.

    L'exemple de dgi77 ne me semble pas tout à fait conforme au fonctionnement des index B*Tree.

  4. #4
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Par défaut
    Ok, merci de ces infos. En gros le mieux est de faire des tests et de voir ce qui est le plus performant.

    Par contre, je pensais qu'avec les statistiques sur les tables et les indexes l'ordre des colonnes dans le select n'avait plus d'intérêt en oracle 9i. Info ou intox ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 4
    Par défaut
    J'ai continué à creuser le problème et visiblement dans oracle 9i si les statistiques sur les tables sont générées l'ordre des colonnes de l'indexe ne change rien.

    Dans le cas où la colonne possédant peu de valeurs différentes (exemple type : le code sexe) est en premier, oracle va directement abandonner les valeurs qui ne l'intéressent pas (çà s'appelle l'index skip scan).

    Dans l'autre cas si la colonne en premier dans l'indexe est une colonne avec un grand nombre de valeurs différentes, la recherche sur l'indexe sera très performante car il élimine directement un grand nombre de valeur.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/12/2013, 10h24
  2. Réponses: 1
    Dernier message: 19/06/2011, 18h48
  3. Comment réordonner les colonnes dans Toad?
    Par sofien dans le forum Toad
    Réponses: 9
    Dernier message: 13/08/2008, 16h25
  4. Réponses: 1
    Dernier message: 02/05/2007, 15h16

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