PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Подобряване на производителността на Postgres jsonb заявки, комбинирани с релационни заявки

Вашата бавна заявка премахва големите jsonb данни за всичките 44255 реда и след това пренася анализираните стойности през сортирането, за да избере първите 20 реда. (Не знам защо прави deTOASTing така нетърпеливо). Така че 44235 JSONB бяха deTOAST просто за да бъдат изхвърлени.

Вашата бърза заявка (вероятно) връща TOAST указатели от хеш съединението, сортира редовете с тези малки указатели и след това премахва TOAST само 20-те оцелели. В случая с 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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql последователното сканиране забавя производителността на 500 милиона реда

  2. Защо този код се проваля в PostgreSQL и как да го поправя (заобиколно решение)? Това ли е дефект на двигателя на Postgres SQL?

  3. Как работи COPY и защо е толкова по-бързо от INSERT?

  4. Вмъкване на нов ред в postgresql при актуализиране на текстовото поле

  5. sqlalchemy множество външни ключове към една и съща таблица