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);
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: