Menggunakan LATERAL JOIN untuk Mengendalikan Panggilan Berbilang Fungsi dengan Argumen Tatasusunan
Dalam PostgreSQL, mengendalikan berbilang panggilan ke fungsi pengembalian set dengan tatasusunan hujah boleh mencabar. Ini menjadi jelas terutamanya apabila fungsi beroperasi pada tatasusunan baris dan mengembalikan set baris dengan lajur tambahan.
Memahami Had
Pendekatan standard melibatkan lulus tatasusunan sebagai parameter tunggal kepada fungsi dan bergantung pada pertanyaan berikutnya untuk mengekstrak data yang berkaitan. Walau bagaimanapun, pendekatan ini selalunya membawa kepada berbilang panggilan ke fungsi, dengan satu panggilan untuk setiap baris dalam tatasusunan.
Penyelesaian LATERAL JOIN
Untuk menangani had ini, PostgreSQL 9.3 dan kemudiannya memperkenalkan pengendali LATERAL JOIN. Operator ini membenarkan untuk menyertai jadual pada keadaan yang dinilai baris demi baris, dengan itu menghapuskan keperluan untuk berbilang panggilan fungsi.
Pertanyaan berikut menunjukkan penggunaan LATERAL JOIN untuk menyertai set fungsi:
SELECT sub.dataid, f.* FROM ( SELECT dataid, array_agg(data) AS arr FROM dataset WHERE dataid = something GROUP BY 1 ) sub LEFT JOIN LATERAL foo(sub.arr) f ON true;
Subkueri mencipta tatasusunan data untuk setiap dataid dan menggabungkannya dengan fungsi foo menggunakan LATERAL JOIN. Ini memastikan bahawa fungsi dipanggil sekali sahaja, dan hasilnya digabungkan dengan data subkueri.
Mengoptimumkan Pertanyaan
Jika fungsi foo() boleh mengembalikan no baris, menggunakan LEFT JOIN LATERAL ... ON true mengekalkan semua baris di sebelah kiri cantuman. Jika tidak, pertimbangkan untuk menggunakan CROSS JOIN LATERAL foo(sub.arr) atau trengkas , foo(sub.arr) untuk mengecualikan baris tanpa hasil.
Pendekatan ini bukan sahaja mengelakkan panggilan berbilang fungsi tetapi juga meningkatkan prestasi dan memudahkan pertanyaan , terutamanya apabila bekerja dengan set data yang besar.
Atas ialah kandungan terperinci Bagaimanakah LATERAL JOIN Mengoptimumkan Berbilang Panggilan Fungsi Pengembalian Set dengan Argumen Tatasusunan dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!