Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memesan dan Mengehadkan Keputusan dengan Cekap daripada Fungsi Jadual PostgreSQL?

Bagaimana untuk Memesan dan Mengehadkan Keputusan dengan Cekap daripada Fungsi Jadual PostgreSQL?

Barbara Streisand
Barbara Streisandasal
2025-01-05 02:33:40627semak imbas

How to Efficiently Order and Limit Results from a PostgreSQL Table Function?

Pemesanan Berparameter PostgreSQL dan Mengehadkan dalam Fungsi Jadual

Soalan:

Bagaimana seseorang boleh memesan dan mengehadkan hasil dengan cekap apabila menggunakan fungsi jadual SQL seperti getStuff? Memesan dan mengehadkan di luar fungsi atau menggunakan plpgsql sedang dipertimbangkan. Adakah terdapat pendekatan yang lebih baik?

Jawapan:

Walaupun penampilan awalnya, fungsi plpgsql ialah pilihan pilihan untuk mengendalikan senario yang lebih kompleks. Prestasi mungkin hanya terjejas apabila fungsi plpgsql bersarang, di mana perancang pertanyaan tidak dapat mengoptimumkan kod sepenuhnya dalam konteks pertanyaan luar.

Fungsi plpgsql dipermudahkan yang mengelakkan CASE berlebihan klausa:

CREATE OR REPLACE FUNCTION get_stuff(_param text, _orderby text, _limit int)
  RETURNS SETOF stuff AS
$func$
BEGIN
   RETURN QUERY EXECUTE '
      SELECT *
      FROM   stuff
      WHERE  col = 
      ORDER  BY ' || quote_ident(_orderby) || ' ASC
      LIMIT  '
   USING _param, _limit;
END
$func$  LANGUAGE plpgsql;

Penggunaan:

SELECT * FROM get_stuff('hello', 'col2', 100);

Nota:

  • Gunakan RETURN QUERY EXECUTE untuk kembalikan hasil pertanyaan dalam satu operasi.
  • Pastikan pengecam adalah kalis SQLi dengan quote_ident().
  • Gunakan USING untuk menghantar nilai parameter, menghalang penghantaran dan SQLi.
  • Elakkan menamakan konflik antara parameter dan nama lajur.
  • The fungsi awal yang disunting gagal kerana ia mengembalikan induk tetapi diisytiharkan untuk mengembalikan barangan SETOF. Sebaliknya, pertimbangkan untuk menggunakan RETURNS TABLE.

Atas ialah kandungan terperinci Bagaimana untuk Memesan dan Mengehadkan Keputusan dengan Cekap daripada Fungsi Jadual PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn