Yhann Posté 16 Juin 2008 Posté 16 Juin 2008 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
Kioob Posté 16 Juin 2008 Posté 16 Juin 2008 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.
Yhann Posté 16 Juin 2008 Auteur Posté 16 Juin 2008 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.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant