Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)
Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)
Ç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)
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)
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.
Sauvegardez, bon sang
Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)
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)
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'))