Après avoir lu les questions et réponses de ce site Web sur les index, une question m'est venue à l'esprit.
Et si, on utilise une table de dimension temporelle avec le niveau de granularité inférieur étant le jour. Où placer les index?
Randy Melder dans la question: Que signifie «index» sur RDBMS? m'a dit :
Considérez un index comme une "table des matières" ... c'est-à-dire une liste ordonnée de pointeurs vers des positions dans un fichier, alias décalages
Dans le cas de la dimension temporelle, la plupart des recherches de données peuvent être effectuées soit pour un jour spécifique, une semaine spécifique, un mois spécifique ou un trimestre spécifique si le calendrier stocke toute la journée pour une année unique .
Ma question est: faut-il mettre des index pour tous ces champs?
Le jour est censé être unique, donc pour celui-ci, je comprends parfaitement l'utilisation des index. Mais un identifiant de semaine aura 7 occurrences , un identifiant de mois aura 30/31 occurrences , un identifiant de quart aura plus ou moins 120 occurrences .
- Faut-il encore mettre des index pour ces champs?
- Sera-t-il toujours utile?
Je vous le demande parce que dans la même question, David Spillett a dit:
Ajouter trop d'index peut être une mauvaise optimisation, bien sûr, car l'espace supplémentaire utilisé pour stocker les index (et la charge d'E / S pour les maintenir si votre base de données voit de nombreuses opérations d'écriture) peut être un problème pire que les requêtes de lecture légèrement moins optimales , alors ne le faites pas trop.
Quelles seraient donc les meilleures considérations pour le cas de la dimension temporelle?
la source
La règle générale est que plus l'index est sélectif (la sélectivité étant définie comme le nombre de valeurs uniques dans une colonne divisé par le nombre de lignes de la table), plus il est probable que le moteur utilise l'index si une requête utilise la colonne dans une clause where.
Si vous envisagez d'indexer une colonne, exécuter une requête en sélectionnant la colonne indexée avant et après et en consultant les plans d'exécution vous dira si l'index est utilisé et, dans l'affirmative, dans quelle mesure l'index aide. Idéalement, la requête que vous utilisez pour le test est celle qui serait utilisée par votre application.
la source
Jusqu'à présent, ma règle d'or a été de ne pas mettre d'index dans mes bases de données de développement pendant que je travaille dessus. À mesure que la base de données de production s'agrandit, j'utilise la journalisation de la base de données et
EXPLAIN
pour déterminer ce qui doit être indexé, puis je crée uniquement les index nécessaires. Cela fonctionne bien tant que l'utilisation de la base de données augmente progressivement et maintient le nombre d'index bas.Lors de l'analyse des données dans la base de données, j'ai généralement besoin d'ajouter des index supplémentaires pour accélérer les demandes qui ne sont pas courantes en production. Je le fais toujours sur des copies de la base de données de production, de sorte que ces index ne sont jamais ajoutés à la production eux-mêmes.
la source