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

Requêtes MySQL Discussion :

Question sur les indexations de table


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut Question sur les indexations de table
    Bonjour,

    Dans un de mes sites ou ma base est trés peuplés (5 millions d'enregistrements dans une de mes tables), je voulais savoir une chose au niveau des INDEX :

    | champs 1 | champs 2 | champs 3 | champs 4 |

    Lorsque je fais une requete avec un WHERE qui peut prendre :

    soit que le premier champs, soit les 2 premiers, soit les 3 premiers ou soit les 4.

    Vaut il mieux indexé les 4 champs ensemble ou séparement car je ne sais pas si le fait d'indéxé les 4 ensembles me fera l'indexation du premier lorque mon WHERE ne recherche que sur le premier champs.

    Si quelqu'un à une reponse à m'apporter cela m'aideré grandement, merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 187
    Points : 74
    Points
    74
    Par défaut Element de reponse
    Voila, j'ai trouver ma reponse sur la DOC :

    MySQL utilise les index sur plusieurs colonnes de telle sorte que les requêtes sont accélérées quand on spécifie une quantité connue de la première colonne de l'index dans un clause WHERE, même si on ne spécifie pas la valeur des autres colonnes.

    Donc en indexant les 4 ensembles, cela marchera si mon champs 2 implique le champs 1, que le champs 3 implique le champs 2 qui implique le champs 1 etc...

    C'est les cas dans mes requetes donc parfait.

    Maintenant, je me pose la question suivante :

    A chacun de mes champs est attribuer un COUNT :

    | couleur 1 | count1 | couleur 2 | count2 | couleur 3 | count3 | couleur 4 | count4 |
    J'ai donc un index sur [ couleur 1 - couleur 2 - couleur 3 - couleur 4 ]
    ce qui accelere selon la doc mes requete que mon where soit de la forme :
    WHERE couleur 1 = $valeur1

    WHERE couleur 1 = $valeur1 AND couleur 2 = $valeur2

    WHERE couleur 1 = $valeur1 AND couleur 2 = $valeur2 AND couleur 3 = $valeur 3
    etc...

    Si je veut ajouter un ORDER cela donne :
    WHERE couleur 1 = $valeur1 ORDER BY count1

    WHERE couleur 1 = $valeur1 AND couleur 2 = $valeur2 ORDER BY count1, count2

    WHERE couleur 1 = $valeur1 AND couleur 2 = $valeur2 AND couleur 3 = $valeur 3 ORDER BY count1, count2, count 3

    etc...
    Je n'utilise pas le order pour toutes mes requetes sur cette table malheureusement, je cherche donc a savoir qu'elle est la meilleur INDEXATION possible pour cette Table...

    Si quelqu'un saurais m'eclairer. Merci a vous.

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Février 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2009
    Messages : 129
    Points : 159
    Points
    159
    Par défaut
    Ton index peut être utilisé à la fois pour retrouver des lignes et pour trier. Dans ton cas, ton index sur plusieurs colonnes convient bien (à condition de toujours respecter l'ordre couleur1, couleur2... dans ton ORDER BY)

    Dans tous les cas, MySQL n'utilise au plus qu'un seul index par requête.

    Stéphane

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 031
    Points : 23 763
    Points
    23 763
    Par défaut
    Bonjour,

    Je te recommande la lecture d'un excellent article sur le sujet.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

Discussions similaires

  1. question sur les index
    Par sohm dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 25/07/2006, 12h42
  2. Question sur les index
    Par Veve44 dans le forum Oracle
    Réponses: 3
    Dernier message: 09/11/2005, 14h01
  3. Question sur les index
    Par barok dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 31/05/2005, 08h06
  4. [DB2] Question sur les index et les vues
    Par ahoyeau dans le forum DB2
    Réponses: 1
    Dernier message: 14/03/2005, 08h30
  5. Questions sur les indexations
    Par freud dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/05/2004, 11h38

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