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

MySQL Discussion :

Est-il déconseillé ou pas de créer des Index sur plusieurs colonnes non contigues ?


Sujet :

MySQL

  1. #1
    Membre à l'essai Avatar de ngmsky
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2011
    Messages : 39
    Points : 20
    Points
    20
    Par défaut Est-il déconseillé ou pas de créer des Index sur plusieurs colonnes non contigues ?
    Bonsoir à tous.
    Malgré les tutoriels et sujets lus à propos des index sur plusieurs colonnes (ou champs), je n'ai pas trouvé de réponse à ma question.

    Supposant une table avec les colonnes id, a, b, c, d.

    j'ai compris qu'on pouvait faire des index regroupant par exemple :
    - (id, a),
    - (id, a, b,),
    - (a, b),
    - (a, b, c),
    - (b, c),
    - (b, c),
    - (b, c, d),
    ou d'autres combinaisons mais en allant toujours de la gauche vers la droite (forcement dans ce sens, gauche vers droite ? ou même dans le sens inverse ?)

    Ma question principale est :
    peut-on avoir une combinaison de colonnes non contiguës (non voisines) dans un index (ou contrainte UNIQUE) ?

    Par exemple :
    - (id, b),
    - (id, b, d),
    - (b, c, e) ,

    Je précise qu'il serait plus simple de réarranger l'ordre des colonnes dans la table pour éviter cette question mais je suis obligé d'avoir cet arrangement (id, a, b, c, d, e). Voila pourquoi je me demande si je peux quand même créer des index sachant pour certains les colonnes ne seront pas consécutives.

    J'espère que j'ai été claire, sinon je peux redonner d'autres précisions, si nécessaire.

    A bientôt en vous remerciant d'avance.

    J'aimerai savoir

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    20 958
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 20 958
    Points : 49 774
    Points
    49 774
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ngmsky Voir le message
    j'ai compris qu'on pouvait faire des index ... mais en allant toujours de la gauche vers la droite (forcement dans ce sens, gauche vers droite ? ou même dans le sens inverse ?)
    D’où vient cette imbécilité ? Avez vous une source à m'indiquer qui dirait de telles choses ?

    Lorsque vous créez une table le placement physique des données dans les espaces de stockage n'est pas forcément celui de l'ordre de la création. Il n'y a donc aucun intérêt ni exigence d'aucune sorte pour créer des index multi-colonne avec l'ordre que vous voulez des colonnes. Le mieux étant que cet ordre facilite la "cherchabilité" des prédicats.

    Lisez ce que j'ai écrit à ce sujet : http://sqlpro.developpez.com/cours/quoi-indexer/ et non des sources profondément débile !
    Aussi : http://blog.developpez.com/sqlpro/p1...sql_sargable_c

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre à l'essai Avatar de ngmsky
    Homme Profil pro
    Inscrit en
    août 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : août 2011
    Messages : 39
    Points : 20
    Points
    20
    Par défaut
    Bonsoir,
    merci pour votre réponse bien précise.

    D’où vient cette imbécilité ? Avez vous une source à m'indiquer qui dirait de telles choses ?
    Un tutoriel .
    Mais, finalement, c'est moi qui ai prolongé sa pensé. Il n'avait pas précisé le sens dans ce cas (conception de l'index) mais plutôt lors de son utilisation.
    Il disait qu'une fois l'index crée, les champs de la clause where des recherches (requettes) devraient suivrent le même sens que celui de la déclaration de l'index à champs multiple.

    Par exemple :
    soit l'index : (a, b, c), il faut faire des recherches du genre
    select ... where a= x and b=y and c=z
    et non :
    select ... where b= x and a=y and c=z


    En tout cas, votre réponse ainsi que vos liens m'ont très bien aidés à comprendre les profondeurs des index multicolonnes.

    Merci infiniment.

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

Discussions similaires

  1. Afficher des paragraphes sur plusieurs colonnes
    Par Invité dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 03/01/2015, 16h59
  2. Créer un index sur plusieurs champs ou pas ?
    Par dbejean dans le forum Requêtes
    Réponses: 9
    Dernier message: 26/03/2008, 19h02
  3. pb pour créer des index [too many keys]
    Par Issam dans le forum Débuter
    Réponses: 3
    Dernier message: 19/01/2005, 21h58
  4. quel langage pour créer des "applications" sur 1 s
    Par jaribu dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 30/07/2003, 15h06
  5. Créer des objets sur la pile ?
    Par Cornell dans le forum Langage
    Réponses: 8
    Dernier message: 03/03/2003, 12h47

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