Uw langzame vraag deTOAST de grote jsonb-gegevens voor alle 44255-rijen en voert vervolgens de ontlede waarden door de sortering om de bovenste 20 rijen te selecteren. (Ik weet niet waarom het deTOASTing zo gretig doet). Dus 44235 JSONB werden gedeTOAST om weggegooid te worden.
Uw snelle vraag is (vermoedelijk) het retourneren van TOAST-aanwijzers van de hash-join, het sorteren van de rijen met die kleine aanwijzers en het deTOASTen van alleen de 20 overlevenden. In het geval van EXPLAIN ANALYZE, worden de overlevenden niet eens deTOAST, het gooit gewoon de wijzers weg.
Dat is het "waarom", wat betreft wat u eraan kunt doen, als u echt niets van de zoekopdracht onder het bovenste gedeelte kunt wijzigen, betwijfel ik of u er iets aan de serverkant aan kunt doen.
Als u de query aanzienlijk kunt wijzigen, kunt u de runtime verbeteren met een CTE. Laat de CTE de hele jsonb selecteren, en dan haalt de select op de CTE de waarde eruit.
WITH T as (select cfiles.property_values as "1907", <rest of query>)
SELECT "1907"->>'name1', "1907"->>'name2', <rest of select list> from T;