Dans le cadre de l'ORM, je me pose 2 ou 3 questions.
Les questions du jour sont :
- une PK (Primary Key, soit clé primaire) est-elle unique et indexée ? ;
- une clé unique est-elle indexée ?
Merci
Sachant qu'une colonne ayant la clé primaire peut être auto-incrémentée, la clé primaire offre l'indexation.Il ne peut y avoir qu'une seule colonne de type AUTO_INCREMENT dans une table, et elle doit être indexée.
Oui j'ai lu ça aussi mais pour moi impossible d'en tirer une conclusion claire, bien que cela laisse à penser qu'une clé unique est indexée.Et MySQL range la clé UNIQUE au nombre de ses index. Après, reste à savoir si cette dernière considération fait partie du standard SQL ou est seulement propre à MySQL.
Autrement dit, il faudra vérifier pour chaque SGBDR sur lequel ton ORM devra travailler pour savoir quels sont les types d'index créés automatiquement ou non.Les Index
Si les bases de données sont censées masquer les mécanismes internes, la définition même de la notion d'index relève de la cuisine des SGBDR. Cela dit, il est indispensable de défnir des index, car SQL2 ne prévoit rien à ce sujet, même si certains SGBDR créent automatiquement des index sans pour autant vous en avertir.
Un index sert à accélérer les recherches portant sur une ou plusieurs colonnes d'une même table. Du fait des colonnes nécessaires aux jointures des tables, il est indispensable de créer des index sur toutes les colonnes relevant de clefs primaires ou étrangères. Il faut prendre conscience que le mécanisme de jointure est fondé sur une recherche de correspondances de valeurs et nécessite donc la pose d'index pour un traitement rapide de la jointure.
On posera donc des index :Cependant, un index est un objet coûteux et il est déconseillé de poser des index (et donc de créer des clefs primaires ou étrangères) sur :
- sur toutes les colonnes composant les clés primaires des tables;
- sur toutes les colonnes composant les clés étrangères des tables;
- sur la plupart des colonnes comportant au moins une contrainte;
- sur les colonnes les plus fréquemment sollicitées dans les clauses de filtrage (WHERE et HAVING) des requêtes;
Enfin, la pose d'index ser des colonnes de type "BLOB" est à proscrire absolument. La plupart du temps, les SGBDR ne l'acceptent pas.
- des colonnes dont le type est de grande dimension (exemple : CHAR(300));
- des colonnes ayant un type de longueur variable (exemple : VARCHAR(32));
- des ensembles de colonnes ayant des types très divers (exemple : INTEGER + CHAR(16) + TIMESTAMP + CHAR(12) + FLOAT).
...