@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);
パフォーマンスとテスト
あなたが言及する後続のシーケンシャルスキャンに関して:テーブル全体をクエリする場合、シーケンシャルスキャンは多くの場合高速 。実行しているバージョン、ハードウェア、カーディナリティの設定と統計、およびデータの配布によって異なります。選択的な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に関するこの関連する回答
詳細な手順があります。
もちろん、設定もオフになっている可能性があります: