PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Miglioramento delle prestazioni delle query jsonb di Postgres combinate con le query relazionali

La tua query lenta sta rimuovendo i dati jsonb di grandi dimensioni per tutte le 44255 righe e quindi trasporta i valori analizzati attraverso l'ordinamento per selezionare le prime 20 righe. (Non so perché fa il deTOASTing avidamente così). Quindi 44235 JSONB sono stati deTOAST solo per essere gettati via.

La tua query veloce è (presumibilmente) restituire i puntatori TOAST dall'hash join, ordinare le righe con quei piccoli puntatori e quindi deTOAST solo i 20 sopravvissuti. Nel caso di EXPLAIN ANALYZE, non disintossica nemmeno i sopravvissuti, butta via solo i puntatori.

Questo è il "perché", per quanto riguarda cosa fare al riguardo, se davvero non riesci a modificare nessuna delle query sotto la parte superiore, dubito che ci sia qualcosa che puoi fare al riguardo sul lato server.

Se puoi modificare la query in modo più sostanziale, puoi migliorare il tempo di esecuzione con un CTE. Chiedi al CTE di selezionare l'intero jsonb, quindi seleziona sul CTE ne estrae il valore.

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