Avez-vous encore besoin d'indexation après la normalisation de la base de données

14

Après avoir effectué une bonne normalisation, avez-vous encore besoin d'indexer la table? Comment cela va-t-il affecter les performances? Cela affectera-t-il même les performances d'une manière ou d'une autre après une bonne normalisation?

Quelles colonnes sont généralement indexées si vous avez déjà la clé primaire et la clé étrangère?

Il semble qu'il soit déjà efficace de normaliser une base de données. Mais, j'aurais peut-être ignoré l'impact de l'indexation sur la base de données. Est-ce efficace uniquement lorsque des requêtes sont utilisées? Comment cela fonctionne-t-il et améliore-t-il une base de données?

Franz Noel
la source
5
Quelles colonnes sont généralement indexées si vous avez déjà la clé primaire et la clé étrangère? Rendez-vous. Des noms. Tout ce dont vous pourriez avoir besoin pour rechercher ou trier.
Carson63000
L'index sur la clé primaire ne compte pas?
CodesInChaos

Réponses:

34

Oui. En fait, vous devrez peut-être faire très attention à vos index. La normalisation concerne le stockage optimal . Cela est souvent en contradiction avec la vitesse de récupération , car des requêtes plus complexes avec des jointures complexes sont utilisées. Parfois, les personnes qui gèrent des bases de données qui nécessitent des vitesses de récupération rapides dénormalisent ou organisent leurs données dans des structures légèrement moins normalisées pour faciliter la récupération.

GrandmasterB
la source
21
L'objectif de la normalisation n'est pas l'efficacité du stockage, mais plutôt la suppression des dépendances d'insertion, de mise à jour et de suppression.
4
Je suis d'accord avec @MichealT que ce n'est pas une question d'efficacité. La cohérence logique est ce que j'ai retiré du lien.
JeffO
Je vais supprimer le mot controversé «efficacité» (même si je pense que cela résume essentiellement l'objectif général de la normalisation) et utiliser simplement le mot «optimal» à la place, laissant ce que cela signifie au lecteur. Le but réel de la normalisation n'est pas réellement pertinent pour expliquer pourquoi les index sont toujours nécessaires après la normalisation d'une base de données.
GrandmasterB
56

Je pense que vous avez mal compris ce que l'indexation fait pour les performances de la base de données.

Un index aide la base de données à trouver des lignes. Les index sont des structures de données spécialisées qui, en échange d'espace disque supplémentaire et de certaines performances lors de l'insertion et de la mise à jour, aident le moteur de base de données à trouver des lignes correspondantes.

Parce qu'ils prennent plus d'espace et coûtent (un minimum de) performances pour les maintenir à jour, vous, en tant que concepteur de base de données, devez créer des index de manière explicite en fonction de votre application et des modèles de requête.

Les index sont orthogonaux à la normalisation de la base de données.

Martijn Pieters
la source
4

Oui, après la normalisation, vous avez encore besoin d'indexation.

Les tables avec lesquelles vous travaillez bénéficient autant que les tables que vous aviez avant la normalisation. En réalité, à eux seuls, ce sont les mêmes: les tables.

Une chose que vous devez considérer cependant, les index vous aident à trouver votre chemin à travers vos données plus rapidement. Normaliser la conception d'une base de données est toujours bon, mais parfois pour des raisons de performances, vous devez dénormaliser l'implémentation. Mais c'est uniquement au cas par cas.

Pieter B
la source
2

Oui.

Les indices sont une méthode pour accélérer la recherche des données. Certaines requêtes sont effectuées par des clés primaires, qui sont généralement implicitement indexées par le moteur de base de données, mais d'autres requêtes sont susceptibles d'utiliser d'autres colonnes. Souvent, certaines requêtes recherchent des colonnes qui ne sont même pas uniques et ne peuvent donc pas devenir des clés primaires après une normalisation. Vous devrez probablement indexer ces colonnes.

Il n'y a qu'une seule façon de savoir quels indices créer. Prenez toutes les requêtes dans l'application, trouvez des exemples de paramètres représentatifs pour elles et demandez au moteur de base de données d'afficher leurs plans de requête (tous les moteurs de base de données ont EXPLAIN, EXPLAIN QUERY PLANou une commande similaire; elle est appelée différemment dans différents moteurs) et testez combien de temps cela prend. Que de créer des indices qui accélèrent ceux qui étaient lents. Et n'oubliez pas de supprimer à nouveau les indices que vous avez essayés mais qui n'ont pas aidé à éviter de gaspiller des ressources.

Jan Hudec
la source
1

Les index sont généralement nécessaires dans toutes les tables sauf les plus petites. Presque toutes les clés étrangères doivent être indexées et la simple configuration d'un FK ne signifie pas que vous avez un index (du moins pas dans certaines bases de données, consultez la documentation de la base de données). Les champs que vous joignez fréquemment ou que vous utilisez dans les clauses where doivent être indexées si elles en bénéficient (vous avez besoin d'une certaine variabilité dans les données pour que les booléens n'en bénéficient pas par exemple) et celles où il est possible d'indexer.

Cependant, chaque index ralentit les insertions \ mises à jour \ suppressions tout en accélérant les sélections, alors choisissez soigneusement vos index.

Les index sont essentiels pour des performances acceptables dans une base de données.

HLGEM
la source
0

Pour un troisième formulaire normal, vous aurez certainement besoin d'index sur toutes les clés primaires.

Si vous avez besoin d'autres index dépend de la façon dont votre base de données est utilisée. Par exemple, si vous recherchez régulièrement des clients dans un code postal particulier, il peut être judicieux d'indexer la colonne zip_code dans la table des clients.

James Anderson
la source