Heim > Datenbank > MySQL-Tutorial > Wie kann man die Ergebnisse einer PostgreSQL-Tabellenfunktion effizient ordnen und begrenzen?

Wie kann man die Ergebnisse einer PostgreSQL-Tabellenfunktion effizient ordnen und begrenzen?

Barbara Streisand
Freigeben: 2025-01-05 02:33:40
Original
658 Leute haben es durchsucht

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

PostgreSQL-parametrisierte Ordnung und Begrenzung in Tabellenfunktionen

Frage:

Wie kann man Ergebnisse bei der Verwendung effizient ordnen und begrenzen? eine SQL-Tabellenfunktion wie getStuff? Eine Bestellung und Einschränkung außerhalb der Funktion oder die Verwendung von plpgsql werden in Betracht gezogen. Gibt es einen besseren Ansatz?

Antwort:

Trotz ihres anfänglichen Erscheinens ist eine plpgsql-Funktion die bevorzugte Option für die Handhabung komplexerer Szenarien. Die Leistung kann nur dann beeinträchtigt werden, wenn plpgsql-Funktionen verschachtelt sind, sodass der Abfrageplaner den Code im Kontext der äußeren Abfrage nicht vollständig optimieren kann.

Eine vereinfachte plpgsql-Funktion, die übermäßige CASE vermeidet Klauseln:

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;
Nach dem Login kopieren

Verwendung:

SELECT * FROM get_stuff('hello', 'col2', 100);
Nach dem Login kopieren

Hinweise:

  • Verwenden Sie RETURN QUERY EXECUTE, um Rückgabe von Abfrageergebnissen in einem einzigen Vorgang.
  • Stellen Sie sicher, dass die Bezeichner vorhanden sind SQLi-sicher mit quote_ident().
  • Verwenden Sie USING, um Parameterwerte zu übergeben und so Casting und SQLi zu verhindern.
  • Vermeiden Sie Namenskonflikte zwischen Parametern und Spaltennamen.
  • Die ursprüngliche Bearbeitung Die Funktion schlägt fehl, weil sie das übergeordnete Element zurückgibt, aber deklariert ist, dass sie SETOF-Inhalte zurückgibt. Erwägen Sie stattdessen die Verwendung von RETURNS TABLE.

Das obige ist der detaillierte Inhalt vonWie kann man die Ergebnisse einer PostgreSQL-Tabellenfunktion effizient ordnen und begrenzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage