sql >> Databáze >  >> RDS >> PostgreSQL

Zlepšení výkonu Postgres jsonb dotazů v kombinaci s relačními dotazy

Vaším pomalým dotazem je odstranění velkých dat jsonb pro všech 44255 řádků a následné provedení analyzovaných hodnot tříděním, abyste vybrali 20 nejlepších řádků. (Nevím, proč to tak dychtivě dělá odtoastování). Takže 44235 JSONB bylo odpáleno, aby bylo zahozeno.

Váš rychlý dotaz (pravděpodobně) vrací ukazatele TOAST z hašovacího spojení, setřídí řádky s těmito malými ukazateli a poté odstraní pouze 20 přeživších. V případě EXPLAIN ANALYZE dokonce ani neodpálí přeživší, pouze zahodí ukazatele.

To je "proč", pokud jde o to, co s tím dělat, pokud opravdu nemůžete změnit žádný z dotazů pod úplně horní částí, pochybuji, že s tím můžete na straně serveru něco udělat.

Pokud můžete upravit dotaz podstatněji, můžete zlepšit dobu běhu pomocí CTE. Nechte CTE vybrat celý jsonb a potom výběr na CTE z něj vytáhne hodnotu.

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


  1. Jak napsat tabulku v PostgreSQL z R?

  2. Jak zjistím základní dotaz mnou vytvořeného materializovaného pohledu?

  3. Migrovat textový/bajtový sloupec PostgreSQL na velký objekt?

  4. Načítání třídy com.mysql.jdbc.Driver ... je zastaralá zpráva