- Kategorien:
SYSTEM$EXPLAIN_PLAN_JSON¶
Mit dieser Funktion wird aus dem Text einer SQL-Anweisung der EXPLAIN-Plan in JSON generiert.
- Siehe auch:
Syntax¶
SYSTEM$EXPLAIN_PLAN_JSON( { <sql_statement_expression> | <sql_query_id_expression> } )
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);
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}]]} | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
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 $$ );
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;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;