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

Ляво съединяване Странично и масив агрегати

Както @Denis вече коментира:няма нужда от LATERAL .Освен това вашата подзаявка е избрала грешната колона. Това работи:

SELECT t1.t1_id, t1.t1_data, t2_ids
FROM   t1
LEFT   JOIN (
    SELECT t1_id, array_agg(t2_id) AS t2_ids
    FROM   t1_t2_rel
    GROUP  BY 1
    ) sub USING (t1_id);

-SQL цигулка.

Ефективност и тестване

Относно последващото последователно сканиране, което споменахте:Ако направите запитване до цялата таблица, последователното сканиране често е по-бързо . Зависи от версията, която използвате, вашия хардуер, вашите настройки и статистики за мощности и разпределение на вашите данни. Експериментирайте със селективно WHERE клаузи като WHERE t1.t1_id < 1000 или WHERE t1.t1_id = 1000 и комбинирайте с настройки за планиране за да научите за възможностите за избор:

SET enable_seqscan = off;
SET enable_indexscan = off;

За нулиране:

RESET enable_seqscan;
RESET enable_indexscan;

Само във вашата местна сесия, имайте предвид! Този свързан отговор на dba.SE има още инструкции.
Разбира се, вашата настройка също може да е изключена:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Естествен сорт, поддържащ големи числа

  2. Неочаквани резултати от SQL заявка с BETWEEN клеймца за време

  3. Извличане на месеца от дата в PostgreSQL

  4. Внедряване на Django + Python 3 + PostgreSQL към AWS Elastic Beanstalk

  5. Пълно копиране на таблица на postgres с SQL