Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)

MySQL, PostgreSQL, requetes, optimisation
root1994
Messages : 29
Inscription : mar. juin 03, 2025 7:24 pm

Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)

Message 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 !
techguy67
Messages : 32
Inscription : sam. juil. 27, 2024 7:25 pm

Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)

Message 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.
flo_net
Messages : 64
Inscription : mar. sept. 09, 2025 7:24 pm

Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)

Message 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.
Sauvegardez, bon sang
root1994
Messages : 29
Inscription : mar. juin 03, 2025 7:24 pm

Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)

Message 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 ?
techguy67
Messages : 32
Inscription : sam. juil. 27, 2024 7:25 pm

Re: Problème d'index GIN qui ne s'utilise pas sur un JSONB (PostgreSQL 14)

Message 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'))
Répondre