En ce qui concerne les questions sur les index, un index n'est pas seulement souhaitable, mais il est nécessaire pour « accélérer » les choses. Si je comprends bien (en termes "profanes"), la fonction d'un index est d'accélérer les recherches et les récupérations de données à l'intérieur d'une table.
Raisons d'utiliser des index :
- Identifiez de manière unique chaque ligne de chaque table (la clé primaire est un index, après tout)
- Les index sont triés (même si les données ne le sont pas)
- Accélérez les recherches et les filtres :un index accélère la récupération des données, car il "conserve" le placement des données dans la table (il "identifie" les données que vous souhaitez récupérer). De plus, cela permet au moteur de base de données de filtrer plus facilement les données (il est toujours plus rapide et plus simple de filtrer trié données que brouillées données)
- Optimisez la manière dont les données sont récupérées lors de l'utilisation de tables associées :chaque clé étrangère doit être indexée afin d'accélérer les requêtes impliquant des relations entre la clé primaire et la clé étrangère
Quelques "règles empiriques" que j'utilise pour décider quels champs doivent être indexés :
- Chaque clé primaire est indexée (le évident un :une clé primaire doit être unique et non nulle)
- Chaque clé étrangère doit être indexée (afin de rendre efficaces les relations entre la clé primaire et la clé étrangère)
- Chaque champ numérique ou de date sur lequel je dois effectuer des recherches doit être indexé. Cela dit, j'essaie d'éviter le
double
(ou tout autre type numérique à virgule flottante) à indexer, car ils sont généralement utilisés pour stocker des valeurs qui ne sont pas destinées à être recherchées. - Chaque
char
ouvarchar
le champ sur lequel je dois effectuer des recherches doit être indexé. Essayez d'éviter les index surtext
champs, car ils peuvent contenir de très grandes valeurs. - Éviter indexation binaire (
blob
) champs... ça n'a aucun sens - Ne pas succomber à la tentation de tout indexer. Prenez votre temps pour décider quels champs doivent être indexés et quels champs ne doivent pas être indexé.