Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

EXPLAIN (SQL)

指定されたクエリのクエリ・プランを返します。

Synopsis

EXPLAIN [ALT | ALL] [STAT | STATS]  [INTO :host-variable] query

引数

引数 説明
ALT または ALL オプション — 代替クエリ・プランを返します。既定では、1 つのクエリ・プランを返します。
STAT または STATS オプション — (ダイナミック SQL SELECT クエリのみ) : クエリ・プランの実行時パフォーマンス統計を返します。既定では、実行時統計なしでクエリ・プランを返します。この構文は、埋め込み SQL では無視されます。
INTO : host-variable オプション — (埋め込み SQL のみ) :クエリ・プランが配置される出力ホスト変数。この構文は、ダイナミック SQL では無視されます。
query SELECTDELETEUPDATE のいずれかの種類のクエリです。

説明

EXPLAIN コマンドは、指定されたクエリのクエリ・プランを XML タグが付けられたテキスト文字列として返します。このクエリ・プランは、Plan という名前の単一のフィールドで構成される結果セットとして返されます。

query には SELECTDELETEUPDATE のいずれかのクエリを指定する必要があります。INSERT クエリを指定すると、Plan フィールドが空の結果セットが返されます。他のキーワードで始まるクエリを query に指定すると、SQLCODE -51 が返されます。[プラン表示] を使用して、他のクエリ (SELECT 節を使用した INSERT クエリなど) のクエリ・プランを表示できます。

ALT キーワードと STAT キーワードは任意の順序で指定できます。INTO キーワードは、これらのキーワードの後に指定する必要があります。

EXPLAIN コマンドを発行するには、%SYSTEM.QUERY_PLAN プロシージャを実行する特権が必要です。

オプションの ALT キーワードは、代替クエリ・プランを生成します。代替クエリ・プランはすべて、同じ XML タグが付いたテキスト文字列で返されます。正規化された query テキスト (<sql> としてタグ付け) は、各クエリ・プランの前にリストされます。

オプションの STAT キーワードは、クエリ・プランの各モジュールに対して実行時パフォーマンス統計を生成します。STAT キーワードは、SELECT クエリでのみサポートされています。クエリ・プランを格納した XML タグ テキスト文字列に実行時統計も記述されます。各モジュールについて以下の統計が収集されます。

  • <ModuleName> : モジュール名。

  • <TimeSpent> : モジュールの総実行時間 (秒単位)。

  • <GlobalRefs> : グローバル参照の数。

  • <LinesOfCode> : コード実行行数。

  • <DiskWait> : ディスク待機時間 (秒単位)。

  • <RowCount> : 結果セット内の行数。

  • <ModuleCount> : このモジュールが実行された回数。

  • <Counter> : このプログラムが実行された回数。

これらの統計は、クエリ・プランのテキスト内で、XML タグが付けられたテキスト文字列として返されます。関連付けられているクエリ・プランの前に、クエリ・プラン内のすべてのモジュールのパフォーマンス統計が返されます。埋め込み SQL では、実行時パフォーマンス統計を生成したり返したりすることはできません。STAT キーワードは無視され、エラーは発行されません。

EXPLAIN コマンドは、$SYSTEM.SQL.Explain()Opens in a new tab メソッドを呼び出して、その結果セットを XML タグが付けられたテキスト文字列が含まれる単一のフィールドの形式にすることによって、プラン表示の結果を返します。

EXPLAIN ALT コマンドは、修飾子 all=1 を付けて $SYSTEM.SQL.Explain()Opens in a new tab メソッドを呼び出して、その結果セットを XML タグが付けられたテキスト文字列が含まれる単一のフィールドの形式にすることによって、[別のプランを表示] の結果を返します。

Note:

このコマンドは、埋め込み SQL、ダイナミック SQL、SQL シェル、管理ポータル、およびJDBC インタフェースでの使用が全面的にサポートされます。ODBC インタフェースではサポートされていません。

結果セット XML の構造

以下に、EXPLAIN ALT STAT query の、XML タグが付けられたテキスト文字列の構造を示します。改行、インデント、およびコメントの注は説明のために付けられています。

<plans> /* tag included even if there is only one plan */
   <plan> /* the first query plan */
      <sql> /* the normalzed SELECT statement text */  </sql>
      <cost value="1147000"/>
         /* if STAT, include the following <stats> tags */
      <stats> <ModuleName>MAIN</ModuleName> /* XML-tagged list of stats (above) for MAIN module */ </stats>
      <stats> <ModuleName>FIRST</ModuleName> /* XML-tagged list of stats (above) for FIRST module */ </stats>
      <stats>  /* additional modules */ </stats>
   /* text of query plan */
   </plan>
   <plan> /* if ALT, same info for first alternate plan */
      ...
   </plan>
</plans>

Explain() メソッド

$SYSTEM.SQL.Explain()Opens in a new tab メソッドを使用して、ObjectScript から同じクエリ・プラン情報を返すことができます。以下に例を示します。

  SET myquery=2
  SET myquery(1)="SELECT Name,Age FROM Sample.Person WHERE Name %STARTSWITH 'Q' "
  SET myquery(2)="ORDER BY Age"
  SET status=$SYSTEM.SQL.Explain(.myquery,{"all":0},,.plan)
    IF status'=1 {WRITE "Explain() failed:" DO $System.Status.DisplayError(status) QUIT}
  ZWRITE plan

以下の例では、クエリ・プランが XML 文字列で返されます。最初に SQL クエリ文字列、次にクエリ・プランが返されます。

EXPLAIN SELECT Name,DOB FROM Sample.Person WHERE Name [ 'Q'

以下の例では、クエリ・プランとパフォーマンス統計が XML 文字列で返されます。最初に SQL クエリ文字列、次にパフォーマンス統計 (モジュール別)、その次にクエリ・プランが返されます。

EXPLAIN STAT SELECT Name,DOB FROM Sample.Person WHERE Name [ 'Q'

以下の例では、代替クエリ・プランが XML 文字列で返されます。最初に SQL クエリ文字列、次に各クエリ・プランが返されます。

EXPLAIN ALT SELECT Name,DOB FROM Sample.Person WHERE Name [ 'Q'

以下の例では、より複雑なクエリ・プランが返されます。クエリ・プランの前と内部の両方にパフォーマンス統計が表示されます。

EXPLAIN STAT SELECT p.Name AS Person, e.Name AS Employee
FROM Sample.Person AS p, Sample.Employee AS e
WHERE p.Name %STARTSWITH 'Q' GROUP BY e.Name ORDER BY p.Name

以下の埋め込み SQL の例は、クエリ・プランを XML 文字列として返します。最初に SQL クエリ文字列、次にクエリ・プランが返されます。

   #sqlcompile select=Runtime
   &sql(EXPLAIN INTO :qplan SELECT Name,DOB FROM Sample.Person WHERE Name [ 'Q')
   WRITE qplan

以下の埋め込み SQL の例は、代替クエリ・プランを XML 文字列として返します。最初に SQL クエリ文字列、次に 1 つ目のクエリ・プラン、その次に SQL クエリ文字列、続いて 2 つ目のクエリ・プランというように返されます。

   #sqlcompile select=Runtime
   &sql(EXPLAIN ALT INTO :qplans SELECT Name,DOB FROM Sample.Person WHERE Name [ 'Q')
   WRITE qplans

以下の埋め込み SQL の例は、クエリ・プランを返します。STAT キーワードは無視されます。

   #sqlcompile select=Runtime
   &sql(EXPLAIN STAT INTO :qplan SELECT Name,DOB FROM Sample.Person WHERE Name [ 'Q')
   WRITE qplan

関連項目

FeedbackOpens in a new tab