Kategorien:

Systemfunktionen

SYSTEM$EXPLAIN_PLAN_JSON

Mit dieser Funktion wird aus dem Text einer SQL-Anweisung der EXPLAIN-Plan in JSON generiert.

Siehe auch:

SYSTEM$EXPLAIN_JSON_TO_TEXT, EXPLAIN_JSON

Syntax

SYSTEM$EXPLAIN_PLAN_JSON( { <sql_statement_expression> | <sql_query_id_expression> } )
Copy

Argumente

sql_statement_expression

Eine Zeichenfolge oder ein Ausdruck, die/der zu einer Zeichenfolge ausgewertet wird, die die SQL-Anweisung für den EXPLAIN-Plan enthält. Wenn eine Zeichenfolgenliteral verwendet wird, sollte dieses in einfache Anführungszeichen ' eingeschlossen sein.

sql_query_id_expression

Eine Zeichenfolge oder ein Ausdruck, die/der zu einer Zeichenfolge ausgewertet wird, die die Abfrage-ID für den EXPLAIN-Plan enthält. Wenn eine Zeichenfolgenliteral verwendet wird, sollte dieses in einfache Anführungszeichen ' eingeschlossen sein.

Rückgabewerte

Die Funktion gibt einen VARCHAR-Wert zurück, der die EXPLAIN-Ausgabe im JSON-kompatiblen Format enthält.

Nutzungshinweise

  • Wenn als Eingabe ein Zeichenfolgenliteral übergeben wird, kann das zum Umschließen der Zeichenfolge verwendete Trennzeichen entweder ein einfaches Anführungszeichen ' oder ein doppeltes Dollarzeichen $$ sein. Wenn das Zeichenfolgenliteral einfache Anführungszeichen (und keine doppelten Dollarzeichen) enthält, müssen Sie die in der Zeichenfolge enthaltenen einfachen Anführungszeichen nicht durch Trennen der Zeichenfolge mit doppelten Dollarzeichen umgehen.

  • Um die Ausgabe dieses Befehls nachzubearbeiten, können Sie Folgendes tun:

    • Verwenden Sie die Funktion RESULT_SCAN, die die Ausgabe wie eine abfragbare Tabelle behandelt.

    • Fügen Sie die JSON-formatierte Ausgabe zur späteren Analyse in eine Tabelle ein. Wenn Sie die Ausgabe im JSON-Format speichern, können Sie die Funktion SYSTEM$EXPLAIN_JSON_TO_TEXT oder EXPLAIN_JSON verwenden, um die JSON-Ausgabe in ein besser lesbares Format (entweder tabellarischer oder formatierter Text) zu konvertieren.

Beispiele

In den Beispielen werden folgende Tabellen verwendet:

CREATE TABLE Z1 (ID INTEGER);
CREATE TABLE Z2 (ID INTEGER);
CREATE TABLE Z3 (ID INTEGER);
Copy

In diesem Beispiel wird ein Zeichenfolgenliteral verwendet, das eine SQL-Anweisung als Eingabeparameter enthält:

SELECT SYSTEM$EXPLAIN_PLAN_JSON(
    'SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID'
    ) AS explain_plan;
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| EXPLAIN_PLAN                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| {"GlobalStats":{"partitionsTotal":2,"partitionsAssigned":2,"bytesAssigned":1024},"Operations":[[{"id":0,"operation":"Result","expressions":["Z1.ID","Z2.ID"]},{"id":1,"parentOperators":[0],"operation":"InnerJoin","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":2,"parentOperators":[1],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z2"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512},{"id":3,"parentOperators":[1],"operation":"JoinFilter","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":4,"parentOperators":[3],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z1"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512}]]} |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Copy

Verwenden Sie $$, um Abfragen zu begrenzen, die einfache Anführungszeichen enthalten:

SELECT SYSTEM$EXPLAIN_PLAN_JSON(
    $$ SELECT symptom, IFNULL(diagnosis, '(not yet diagnosed)') FROM medical $$
    );
Copy

Der folgende Code zeigt, wie Sie den EXPLAIN-Plan für eine bereits ausgeführte Abfrage anzeigen:

Führen Sie die Abfrage aus:

SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID;
Copy

Führen Sie EXPLAIN für die Abfrage aus, und rufen Sie LAST_QUERY_ID() auf, um die Abfrage-ID zu ermitteln:

SELECT SYSTEM$EXPLAIN_PLAN_JSON(LAST_QUERY_ID()) AS explain_plan;
Copy