Comment déterminer le coût / avantage de l'ajout d'un index?

10

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, UPDATEou DELETE. 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?

Gili
la source
pg_stat_user_indexesvous 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_tablesmais en raison de HOT, toutes les mises à jour ne devront pas nécessairement toucher l'index, vous pourriez donc surestimer un peu.
Craig Ringer
@CraigRinger, c'est très utile. Je vous remercie!
Gili
Je me fie presque exclusivement à pgBadger. Et mon instinct.
Colin 't Hart

Réponses:

4

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

Mladen Uzelac
la source
4
Les règles générales sont agréables, mais trop générales dans ce cas. Je recherche un outil / mesure concret qui suggérera l'ajout / la suppression d'index en fonction du comportement d'exécution réel de mon application.
Gili
C'est peut-être l'outil que vous recherchez: enterprisedb.com/products-services-training/products/…
Mladen Uzelac
1

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.

Rythme
la source