|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : février 2008 Messages : 73 ![]() |
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`) Code :
UNIQUE INDEX `UNIQUE_demande_doublon` (`rangvoeu`, `decision`, `anneegestion`, `INE`) |
|
00
|
|
|
#2 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Faites le plan d’exécution et vous le verrez.
Normalement , si vous faites une requête du type 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) |
|
|
00
|
|
|
#3 |
|
Membre du Club
![]() Inscription : février 2008 Messages : 73 ![]() |
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. |
|
00
|
|
|
#4 |
![]() ![]() |
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`) 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`) 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 ! |
|
00
|
|
|
#5 |
|
Membre du Club
![]() Inscription : février 2008 Messages : 73 ![]() |
Merci pour l'explication !
Maintenant faut que je mette ça en application. |
|
00
|
Copyright © 2000-2012 - www.developpez.com