sql >> Databasteknik >  >> RDS >> PostgreSQL

Förbättra prestanda för Postgres jsonb-frågor kombinerat med relationsfrågor

Din långsamma fråga deTOASTAR den stora jsonb-datan för alla 44255 rader och för sedan de analyserade värdena genom sorteringen för att välja ut de 20 översta raderna. (Jag vet inte varför det gör deTOASTingen ivrigt så). Så 44235 JSONB deTOASTerades bara för att kastas bort.

Din snabba fråga returnerar (förmodligen) TOAST-pekare från hash-join, sorterar raderna med dessa små pekare och deTOASTAR sedan endast de 20 överlevande. I fallet med EXPLAIN ANALYZE, deTOASTAR det inte ens de överlevande, det kastar bara bort pekarna.

Det är "varför", vad gäller vad du ska göra åt det, om du verkligen inte kan ändra någon av frågorna under den allra översta delen, tvivlar jag på att det finns något du kan göra åt det på serversidan.

Om du kan ändra frågan mer väsentligt kan du förbättra körtiden med en CTE. Låt CTE välja hela jsonb, och sedan drar select på CTE värdet ur den.

WITH T as (select cfiles.property_values as "1907", <rest of query>) 
SELECT "1907"->>'name1', "1907"->>'name2', <rest of select list> from T;


  1. Laravel localhost fungerar, men heroku ger 500 fel

  2. MySQL, flera rader för att separera fält

  3. Visa databaser/tabeller I UTFIL

  4. Ta bort ett databaspostkonto i SQL Server (T-SQL)