Truy vấn chậm của bạn đang deTOASTing dữ liệu jsonb lớn cho tất cả 44255 hàng, sau đó mang các giá trị được phân tích cú pháp thông qua sắp xếp để chọn ra 20 hàng hàng đầu. (Tôi không biết tại sao nó lại deTOASTing háo hức như vậy). Vì vậy, 44235 JSONB đã bị deTOASTed chỉ để vứt bỏ.
Truy vấn nhanh của bạn (có lẽ là) trả về con trỏ TOAST từ phép tham gia băm, sắp xếp các hàng với các con trỏ nhỏ đó và sau đó loại bỏTOAST chỉ 20 con sống sót. Trong trường hợp GIẢI THÍCH PHÂN TÍCH, nó thậm chí không loại bỏ những người sống sót, nó chỉ ném các con trỏ đi.
Đó là "lý do tại sao", về việc phải làm gì với nó, nếu bạn thực sự không thể thay đổi bất kỳ truy vấn nào bên dưới phần trên cùng, tôi nghi ngờ rằng bạn có thể làm bất cứ điều gì về nó ở phía máy chủ.
Nếu bạn có thể sửa đổi truy vấn về cơ bản hơn, thì bạn có thể cải thiện thời gian chạy với CTE. Yêu cầu CTE chọn toàn bộ jsonb, sau đó chọn trên CTE lấy giá trị ra khỏi nó.
WITH T as (select cfiles.property_values as "1907", <rest of query>)
SELECT "1907"->>'name1', "1907"->>'name2', <rest of select list> from T;