- Le schéma semble raisonnable (pour la requête, vous n'avez pas réellement besoin des index, et certains des index sont déjà couverts par les contraintes FK)
- La table de jonction n'a pas besoin d'une clé de substitution (mais cela ne nuira pas).
- La vraie raison de la lenteur de votre requête est qu'elle a besoin de toutes les lignes de toutes les tables pour calculer les agrégats. Si vous avez besoin de 100 % des données, les index ne sont pas très utiles.
- L'ajout d'une contrainte supplémentaire (par exemple sur snapshot_timestamp> =some_date) entraînera probablement un plan différent qui utilisera les index.