Din langsomme forespørgsel fjerner de store jsonb-data for alle 44255 rækker og fører derefter de udparsede værdier gennem sorteringen for at udvælge de øverste 20 rækker. (Jeg ved ikke, hvorfor det gør den deTOASTing ivrigt sådan). Så 44235 JSONB blev deTOASTeret bare for at blive smidt væk.
Din hurtige forespørgsel returnerer (formodentlig) TOAST-pointere fra hash-join, sortering af rækkerne med de små pointere og deTOASTer derefter kun de 20 overlevende. I tilfælde af EXPLAIN ANALYZE, deTOASTER det ikke engang de overlevende, det kaster bare pointerne væk.
Det er "hvorfor", hvad angår hvad du skal gøre ved det, hvis du virkelig ikke kan ændre nogen af forespørgslen under den øverste del, tvivler jeg på, at der er noget du kan gøre ved det på serversiden.
Hvis du kan ændre forespørgslen mere væsentligt, kan du forbedre køretiden med en CTE. Få CTE'en til at vælge hele jsonb'en, og derefter trækker valget på CTE'en værdien ud af det.
WITH T as (select cfiles.property_values as "1907", <rest of query>)
SELECT "1907"->>'name1', "1907"->>'name2', <rest of select list> from T;