Verwenden von LATERAL JOIN zur Verarbeitung mehrerer Funktionsaufrufe mit Array-Argumenten
In PostgreSQL die Verarbeitung mehrerer Aufrufe einer Mengenrückgabefunktion mit einem Array Argumentation kann eine Herausforderung sein. Dies wird besonders deutlich, wenn die Funktion ein Array von Zeilen bearbeitet und eine Reihe von Zeilen mit einer zusätzlichen Spalte zurückgibt.
Verstehen der Einschränkung
Der Standardansatz beinhaltet das Übergeben das Array als einzelner Parameter für die Funktion und verlässt sich auf eine nachfolgende Abfrage, um die relevanten Daten zu extrahieren. Dieser Ansatz führt jedoch oft zu mehreren Aufrufen der Funktion, mit einem Aufruf für jede Zeile im Array.
Die LATERAL JOIN-Lösung
Um diese Einschränkung zu beheben, In PostgreSQL 9.3 und höher wurde der LATERAL JOIN-Operator eingeführt. Dieser Operator ermöglicht das Verbinden von Tabellen unter einer Bedingung, die Zeile für Zeile ausgewertet wird, wodurch die Notwendigkeit mehrerer Funktionsaufrufe entfällt.
Die folgende Abfrage demonstriert die Verwendung von LATERAL JOIN zum Verbinden einer Reihe von Funktionen:
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;
Die Unterabfrage erstellt ein Datenarray für jede Daten-ID und verknüpft es mithilfe von LATERAL JOIN mit der foo-Funktion. Dadurch wird sichergestellt, dass die Funktion nur einmal aufgerufen wird und das Ergebnis mit den Unterabfragedaten verknüpft wird.
Optimierung der Abfrage
Wenn die foo()-Funktion nein zurückgeben kann Zeilen, wobei LEFT JOIN LATERAL ... ON true verwendet wird, bleiben alle Zeilen links vom Join erhalten. Andernfalls sollten Sie die Verwendung von CROSS JOIN LATERAL foo(sub.arr) oder der Abkürzung , foo(sub.arr) in Betracht ziehen, um Zeilen ohne Ergebnisse auszuschließen.
Dieser Ansatz vermeidet nicht nur mehrere Funktionsaufrufe, sondern verbessert auch die Leistung und vereinfacht Abfragen , insbesondere bei der Arbeit mit großen Datenmengen.
Das obige ist der detaillierte Inhalt vonWie kann LATERAL JOIN mehrere Funktionsaufrufe mit Array-Rückgabe in PostgreSQL optimieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!