- O esquema parece razoável (para a consulta, você não precisa dos índices, e alguns dos índices já estão cobertos pelas restrições FK)
- A tabela Junction não precisa de uma chave substituta (mas não prejudicará).
- A verdadeira razão para sua consulta ser lenta é que ela precisa de todas as linhas de todas as tabelas para calcular os agregados. Se você precisa de 100% dos dados, os índices não podem ajudar muito.
- Adicionar uma restrição adicional (por exemplo, em snapshot_timestamp> =some_date) provavelmente causará um plano diferente que usará os índices.