Page 1 sur 1
Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)
Publié : mer. déc. 11, 2024 5:01 am
par root1994
Ça fait 2 jours que je me bats avec un index GIN sur un champ JSONB (table de 8M enregistrements). L'index est créé mais EXPLAIN montre un seq scan systématique. Voici la requête : SELECT * FROM logs WHERE data @> '{"error": true}'. Help !
Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)
Publié : mer. déc. 11, 2024 7:01 am
par techguy67
As-tu vérifié les stats avec pg_stat_all_indexes ? Il manque peut-être des statistiques. Essaye un VACUUM ANALYZE en urgence.
Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)
Publié : mer. déc. 11, 2024 8:01 am
par flo_net
J'ai eu le même souci ! Dans mon cas, le planner estimait mal la sélectivité. J'ai dû forcer avec SET enable_seqscan=off pour 'éduquer' le planner. Contre-intuitif mais efficace.
Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)
Publié : mer. déc. 11, 2024 11:01 am
par root1994
Le VACUUM ANALYZE n'a rien changé... Par contre enable_seqscan=off marche ! Mais c'est un peu radical non ? Je peux le mettre en production comme ça ?
Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)
Publié : mer. déc. 11, 2024 4:01 pm
par techguy67
Non c'est une mauvaise idée en prod. Essaie plutôt d'ajuster random_page_cost (0.1 sur SSD) ou de créer un index plus spécifique : CREATE INDEX ON logs USING gin ((data->'error'))