DB2 Mit Klausel
Ich bin neu in DB2-und ich habe eine Frage über die mit - Klausel.
Zum Beispiel in der folgenden Abfrage:
WITH values AS
(
SELECT user_id, user_data FROM USER WHERE user_age < 20
)
SELECT avg(values.user_data) FROM values
UNION
SELECT sum(values.user_data) FROM values
Wie oft wird der Allgemeine Tabellenausdruck ausgeführt werden? Wird das Ergebnis der with-Klausel werden gespeichert in einer temporären Tabelle oder wird es tun, sub-select zweimal.
(Ich verwende mit und union hier nur um ein Beispiel zu geben, und sorry für mein schlechtes Englisch)
führen Sie es und schauen Sie auf den plan, in sql-server dies wird zweimal ausgeführt.
InformationsquelleAutor grape_mao | 2014-02-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als @Vladimir Oselsky erwähnt hat, nur der Blick auf den Ausführungsplan geben Sie eine definitive Antwort. In diesem erfundenen Beispiel die CTE-Anweisung ausgewertet wird wahrscheinlich zweimal ausgeführt.
InformationsquelleAutor mustaccio
In DB2 common table expressions sollten die Common Table Expression-Knoten im Ausführungsplan (siehe die Dokumentation hier). Dieser Knoten explizit sagt:
Lese ich diesen sagen, dass der CTE nur einmal ausgewertet, instanziiert, und dann mehrfach verwendet werden. Auch, wenn den Allgemeinen Tabellenausdruck verwiesen wird, nur eine Zeit, die "Instanziierung" optimiert ist Weg.
Beachten Sie, dass dies die Art ist, wie Postgres behandelt die Allgemeine Tabellenausdrücke (materialisierte Unterabfragen) und nicht, wie der SQL Server behandelt.
in dashDB, die DB2-wie, die Tabelle wird mehrfach abgetastet.
InformationsquelleAutor Gordon Linoff