PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Gabung Kiri Lateral dan agregat array

Seperti yang sudah dikomentari @Denis:tidak perlu LATERAL .Juga, subquery Anda memilih kolom yang salah. Ini berfungsi:

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 fiddle.

Kinerja dan pengujian

Mengenai pemindaian berurutan berikutnya yang Anda sebutkan:Jika Anda menanyakan seluruh tabel, pemindaian berurutan sering lebih cepat . Tergantung pada versi yang Anda jalankan, perangkat keras Anda, pengaturan dan statistik kardinalitas dan distribusi data Anda. Percobaan dengan selektif WHERE klausa seperti WHERE t1.t1_id < 1000 atau WHERE t1.t1_id = 1000 dan gabungkan dengan setelan perencana untuk mempelajari tentang pilihan:

SET enable_seqscan = off;
SET enable_indexscan = off;

Untuk menyetel ulang:

RESET enable_seqscan;
RESET enable_indexscan;

Hanya di sesi lokal Anda, ingat! Jawaban terkait ini di dba.SE memiliki lebih banyak petunjuk.
Tentu saja, setelan Anda juga mungkin tidak aktif:




  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 mengubah tipe data kolom menjadi stempel waktu tanpa zona waktu

  2. Kuadran 2 di PostgresConf US 2018

  3. Bagaimana statement_timestamp() Bekerja di PostgreSQL

  4. org.postgresql.util.PSQLException:FATAL:maaf, sudah terlalu banyak klien

  5. Menangani Query Lambat Dengan PostgreSQL