Aller au contenu

Indexer des colonnes de MySQL


Sujets conseillés

Posté

Bonjour,

Dans phpMyAdmin, je me suis rendu compte que lorsque je créé une table, et que je définis des index sur plusieurs champs, ils apparaissent comme regroupés.

C'est à dire que si j'exporte la structure de la table, j'obtiens une ligne comme :

KEY `page_id` (`page_id`,`zone_id`,`module`,`module_id`,`publie`)

Alors que si je définis mes index après la création de la table, j'obtiens, en exportant la structure de la table :

KEY `page_id` (`page_id`),
KEY `zone_id` (`zone_id`),
KEY `module` (`module`),
KEY `module_id` (`module_id`),
KEY `publie` (`publie`)

Quelle différence ? Est-ce la même chose ? Si ce n'est pas la même chose, quand faut-il utiliser l'une plutôt que l'autre de ces solutions ?

Pouvez-vous donner un exemple précis pour que je puisse bien comprendre ?

Merci :)

Posté

Hello,

ce n'est pas du tout la même chose non.

MySQL va généralement utiliser un seul index par clause/jointure.

Si tu fais une requete avec deux clauses de ce genre :

where page_id = 18 and zone_id = 20

Si tu as l'index groupé, MySQL pourra s'en servir pour rechercher directement page_id + zone_id.

Sinon, il utilisera au choix l'index sur page_id ou zone_id, mais pas les deux en même temps.

Par contre si tu as une requete avec uniquement cette clause :

where module = 'toto'

MySQL sera incapable d'utiliser l'index groupé, car l'ordre de l'index groupé est important : il aurait fallu que la clause ait des critères sur page_id et zone_id également.

Pour savoir quand utiliser quoi, cela dépend essentiellement de tes requêtes.

Posté

Salut Kioob,

Ton explication est très claire.

Des années que j'utilise des bases mySQL sans avoir connaissance de ce point.

Du coup, je vais pouvoir procéder à des optimisations...

Encore merci pour ta réponse.

Bonne fin de journée.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...