遅いクエリは、44255行すべての大きなjsonbデータをデトーストし、解析された値を並べ替えて実行して、上位20行を選択します。 (なぜそれがそのように熱心にdeTOASTingを行うのか分かりません)。そのため、44235JSONBは破棄されるためにdeTOASTされました。
高速クエリは、(おそらく)ハッシュ結合からTOASTポインターを返し、それらの小さなポインターで行を並べ替えてから、20人の生存者のみをdeTOASTします。 EXPLAIN ANALYZEの場合、サバイバーをデトーストすることすらなく、ポインターを破棄するだけです。
それが「理由」です。どうすればよいかというと、一番上の部分の下にあるクエリを本当に変更できない場合は、サーバー側で何かできることはないと思います。
>クエリをより大幅に変更できる場合は、CTEを使用して実行時間を改善できます。 CTEにjsonb全体を選択させてから、CTEの選択により値を引き出します。
WITH T as (select cfiles.property_values as "1907", <rest of query>)
SELECT "1907"->>'name1', "1907"->>'name2', <rest of select list> from T;