À cause de :
Seq Scan on invoices (...) (actual ... rows=118027 <— this
Filter: (account_id = 1)
Rows Removed by Filter: 51462 <— vs this
Total runtime: 39.917 ms
Vous sélectionnez tellement de lignes qu'il est moins coûteux de lire l'intégralité du tableau.
Questions et réponses antérieures associées d'aujourd'hui pour une lecture plus approfondie :
-
Pourquoi Postgresql n'utilise-t-il pas l'index pour les requêtes IN ?
-
Postgres utilise un mauvais index lors de l'interrogation d'une vue d'expressions indexées ?
(Voir aussi la réponse plus longue de Craig sur la seconde pour des notes supplémentaires sur les subtilités des index.)