PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Liên kết bên trái và tổng hợp mảng

Như @Denis đã nhận xét:không cần LATERAL Ngoài ra, truy vấn con của bạn đã chọn sai cột. Điều này hoạt động:

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.

Hiệu suất và thử nghiệm

Liên quan đến quá trình quét tuần tự tiếp theo mà bạn đề cập:Nếu bạn truy vấn toàn bộ bảng, quá trình quét tuần tự thường nhanh hơn . Phụ thuộc vào phiên bản bạn đang chạy, phần cứng của bạn, cài đặt và số liệu thống kê về bản số và phân phối dữ liệu của bạn. Thử nghiệm với WHERE có chọn lọc các mệnh đề như WHERE t1.t1_id < 1000 hoặc WHERE t1.t1_id = 1000 và kết hợp với cài đặt lập kế hoạch để tìm hiểu về các lựa chọn:

SET enable_seqscan = off;
SET enable_indexscan = off;

Để đặt lại:

RESET enable_seqscan;
RESET enable_indexscan;

Chỉ trong phiên địa phương của bạn, phiền bạn! Câu trả lời liên quan này trên dba.SE có nhiều hướng dẫn hơn.
Tất nhiên, cài đặt của bạn cũng có thể bị tắ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. NodeJS – Thêm mảng chuỗi trong truy vấn PostgreSQL

  2. Sửa bảng TOAST bị hỏng

  3. Rails 5 form_for với mảng hộp kiểm

  4. Phát triển PostgreSQL cho Windows, Phần 3

  5. Không thể hoàn thành di chuyển bình