Dalam PostgreSQL, anda mungkin menghadapi situasi di mana anda perlu menggunakan fungsi pengembalian set beberapa kali , setiap kali menyediakan tatasusunan sebagai hujah. Walau bagaimanapun, apabila menggunakan kaedah tradisional menghantar tatasusunan tunggal kepada fungsi, fungsi itu mungkin dipanggil beberapa kali, mengakibatkan pemprosesan yang tidak cekap.
Untuk menyelesaikan isu ini, PostgreSQL 9.3 dan kemudiannya menawarkan LEFT JOIN LATERAL . .. PADA sintaks sebenar. Pendekatan ini mengoptimumkan pelaksanaan dengan melakukan langkah berikut:
Untuk menggambarkan pendekatan ini, pertimbangkan contoh berikut:
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;
Dalam contoh ini, subkueri mengagregatkan lajur data untuk setiap dataid, mencipta tatasusunan. Tatasusunan ini kemudiannya dihantar sebagai hujah kepada fungsi foo(), yang mengembalikan set baris data yang dipertingkatkan.
Sebagai alternatif, jika fungsi foo() berpotensi tidak mengembalikan baris dan anda mahu mengekalkan semua baris di sebelah kiri gabungan, anda boleh menggunakan CROSS JOIN LATERAL atau sintaks trengkas.
Dengan menggunakan pendekatan ini, anda boleh menggunakan fungsi pengembalian set berbilang kali dengan cekap dengan argumen tatasusunan, mengelakkan panggilan fungsi yang tidak perlu.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Panggil Fungsi Pengembalian Set Berbilang Kali dengan Cekap dengan Argumen Tatasusunan dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!