Bonjour,

j'ai un sérieux souci de performance sur l'une de mes vues qui contient 16 tables, j'ai bien fait en sorte d'éliminer tous les LEFT JOIN inutiles et pourtant, une requête qui doit me retourner 2 lignes avec une dizaine de champs, met, en local, 800 à 900 ms à s’exécuter.

Quelques infos de config :
- version : 9.4
- OS : Debian 8
- nombre de connexions actives : ~2.
- Hôte : localhost
- pg_stat_activity : 4 lignes donc charge du SGBD quasi nulle.

Un EXPLAIN ANALYZE montre clairement que ce sont les jointures qui prennent du temps, sur certaines tables, je comprends le choix d'un scan séquentiel quand lesdites tables ont peu de données, cependant, même sur des tables contenant plusieurs milliers de lignes, Postgres fait du scan séquentiel sur la plupart des tables, seulement 3 utilisent un index.

Alors, j'ai effectué plusieurs tâches de maintenance :
- VACCUM ANALYZE pour mettre à jour les stats,
- REINDEX DATABASE pour mettre à jour les index.

Malgré cekui Postgres ne change pas son plan d'exécution, en conséquence, dans des conditions réelles entre 2 serveurs distants dont une BDD postgres qui a une charge, cette même requête peut être plus de 2 fois plus lente que mes tests en localhost.

C'est probablement considéré comme une mauvaise pratique, seulement, je n'ai pas vu de fonctionnalité équivalente aux HINTS de Oracle pour forcer l'utilisation d'index.

Ma question est, est-il possible, au moins à des fins de tests de forcer l'utilisation d'index afin d'optimiser les performances ?

A celles/ceux qui répondront, oubliez une seconde que forcer l'utilisation d'index est une mauvaise pratique. Auriez-vous des solutions alternatives ?