Selon Craig Ringer :
Bien que ce soit généralement une bonne idée de créer un index sur (ou incluant) vos colonnes de clé étrangère côté référencement, ce n'est pas obligatoire. Chaque index que vous ajoutez ralentit légèrement les opérations DML, vous payez donc un coût de performance pour chaque
INSERT
,UPDATE
ouDELETE
. Si l'index est rarement utilisé, cela ne vaut peut-être pas la peine.
Comment déterminez-vous si l'avantage d'ajouter un indice dépasse son coût?
Profilez-vous les tests unitaires avant / après l'ajout d'un index et vérifiez-vous un gain de performance global? Ou existe-t-il une meilleure façon?
pg_stat_user_indexes
vous aide à le faire, en affichant des informations sur l'utilisation de l'index. Pour estimer les coûts de maintenance, vous pouvez consulter l'activité d'écriture de votre table,pg_stat_user_tables
mais en raison de HOT, toutes les mises à jour ne devront pas nécessairement toucher l'index, vous pourriez donc surestimer un peu.Réponses:
L'utilisation de l'index dépend de la structure de vos données et de la sélectivité de vos données. Si vous faites des requêtes que vous ne les utilisez pas, elles coûtent cher. Si vous les utilisez efficacement, ils sont un excellent outil. Il existe un planificateur de requêtes et une analyse de planificateur de requêtes (
EXPLAIN
) de planification ou de planification et d'exécution de commandes (EXPLAIN ANALYZE
).Et il existe un excellent livre en ligne: utilisez l'index luke sur l'utilisation recommandée des index
la source
Choisissez des règles générales et suivez-les. Par exemple, je crée toujours un index du côté de référence d'une clé étrangère.
Assurez-vous de tester les performances de votre produit en fonction de critères de performances basés sur les besoins des utilisateurs. Par exemple, le système doit gérer une charge entrante de 100 requêtes de type POST X par minute.
Si vous ne pouvez pas répondre à vos exigences de performances, affinez votre modèle, ce qui pourrait enfreindre vos règles générales dans ce processus.
la source