Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/07/2011, 11h10   #1
Membre du Club
 
Inscription : février 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 73
Points : 57
Points : 57
Par défaut Importance de l'ordre de définition d'une clef unique

Bonjour,

Je souhaiterais savoir si l'ordre de définition d'une clef unique a une importance. Par exemple :

Code :
UNIQUE INDEX `UNIQUE_demande_doublon` (`INE`, `anneegestion`, `rangvoeu`, `decision`)
est-il différent de

Code :
UNIQUE INDEX `UNIQUE_demande_doublon` (`rangvoeu`, `decision`, `anneegestion`, `INE`)
?
iliak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 11h23   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Faites le plan d’exécution et vous le verrez.

Normalement , si vous faites une requête du type

Code :
SELECT 1 FROM maTable WHERE INE=xxx
Votre plan devrait vous indiquer l'utilisation de l'index pour le cas 1 et pas pour le cas 2

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 11h39   #3
Membre du Club
 
Inscription : février 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 73
Points : 57
Points : 57
Merci de la réponse, mais j'avoue que je n'ai pas tout compris...

Je fais en parallèle des tests d'injection en modifiant l'ordre des champs et comme ça représente un volume assez important ça prend du temps.
iliak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 11h15   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 007
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 007
Points : 18 278
Points : 18 278
Envoyer un message via MSN à CinePhil
Oui ça a une importance !

Soient les données suivantes :
`INE`, `anneegestion`, `rangvoeu`, `decision`
1, 2008, 1, Oui
2, 2009, 1, Non
3, 2007, 2, Oui
1, 2008, 2, Non
5, 2008, 3, Oui
2, 2009, 2, Oui

Avec cet index :
Code :
UNIQUE INDEX `UNIQUE_demande_doublon` (`INE`, `anneegestion`, `rangvoeu`, `decision`)
Voici le tri effectué :
1, 2008, 1, Oui
1, 2008, 2, Non
2, 2009, 1, Non
2, 2009, 2, Oui
3, 2007, 2, Oui
5, 2008, 3, Oui

C'est classé par INE puis pour chaque INE par année, puis pour chaque année de chaque INE par rangvoeu...
Du coup tu constates que la colonne Année n'est pas dans l'ordre (2007 apparaît après 2008 et 2009).

Avec l'autre index :
Code :
UNIQUE INDEX `UNIQUE_demande_doublon` (`rangvoeu`, `decision`, `anneegestion`, `INE`)
Voici le tri :
2, 2009, 1, Non
1, 2008, 1, Oui
1, 2008, 2, Non
3, 2007, 2, Oui
2, 2009, 2, Oui
5, 2008, 3, Oui

C'est trié par rangvoeu (1 puis 2 puis 3) puis dans chaque rangvoeu par décision (Non puis Oui dans l'ordre alphabétique) puis pour chaque décision par année (2007 puis 2009).

Par contre, la contrainte d'unicité sur ces 4 colonnes sera respectée quelle que soit l'ordre de l'index UNIQUE. Si avec le second index vous essayez d'insérer le quadruplet {1, 2008, 2, Non}, ce sera refusé car il existe déjà !
La contrainte UNIQUE est ensembliste (non ordonnée) mais l'index est ordonné.

À noter qu'il est en principe plus performant d'ordonner ses index multi-colonnes en commençant par la colonne qui comprend le plus grand nombre de valeurs. Dans mon exemple, commencer l'index par la colonne Décision n'aurait aucun intérêt car il n'y a que deux valeurs possibles et l'index serait probablement ignoré. Le plus pertinent est dans ce cas, et probablement dans le tien de commencer l'index par l'INE.

À lire sur les index :
http://sqlpro.developpez.com/cours/quoi-indexer/
http://sqlpro.developpez.com/optimis...ntenanceIndex/
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2011, 11h07   #5
Membre du Club
 
Inscription : février 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 73
Points : 57
Points : 57
Merci pour l'explication !
Maintenant faut que je mette ça en application.
iliak est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h46.


 
 
 
 
Partenaires

Hébergement Web