<!--
$Header: /usr/prj/pg/cvsroot/doc/doc/src/sgml/ref/explain.sgml,v 1.6 2001/09/07 11:33:19 i-kaori Exp $
Postgres documentation
-->

<refentry id="SQL-EXPLAIN">
 <refmeta>
  <refentrytitle id="SQL-EXPLAIN-TITLE">
   EXPLAIN
  </refentrytitle>
  <refmiscinfo>SQL<!-- Language Statements -->言語</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   EXPLAIN
  </refname>
  <refpurpose>
   <!-- Shows statement execution plan -->
   問い合わせ文の実行計画を表示します。<indexterm><primary>EXPLAIN</primary></indexterm><indexterm><primary>SQL</primary><secondary>EXPLAIN</secondary></indexterm><indexterm><primary sortas="といあわせ">問い合わせ</primary><secondary sortas="じっこうけいかくのひょうじ">実行計画の表示</secondary></indexterm>

  </refpurpose>
 </refnamediv>

 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>1999-07-20</date>
  </refsynopsisdivinfo>
<synopsis>
EXPLAIN [ VERBOSE ] <replaceable class="PARAMETER">query</replaceable>        
</synopsis>

  <refsect2 id="R2-SQL-EXPLAIN-1">
   <refsect2info>
    <date>1998-09-01</date>
   </refsect2info>
   <title>
    <!-- Inputs -->入力
   </title>

    <variablelist>
     <varlistentry>
      <term>VERBOSE</term>
      <listitem>
       <para>
	<!-- Flag to show detailed query plan. -->
        問い合わせ計画の詳細表示用のフラグです。
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><replaceable class="PARAMETER">query</replaceable></term>
      <listitem>
       <para>
	<!-- Any <replaceable class="PARAMETER">query</replaceable>. -->
        任意の問い合わせです。

       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>

  <refsect2 id="R2-SQL-EXPLAIN-2">
   <refsect2info>
    <date>1998-04-15</date>
   </refsect2info>
   <title>
   <!--  Outputs -->出力
   </title>

    <variablelist>
     <varlistentry>
      <term><computeroutput>
NOTICE:  QUERY PLAN:
<replaceable>plan</replaceable>
      </computeroutput></term>
      <listitem>
       <para>
        <!-- 
	Explicit query plan from the <productname>Postgres</productname> 
        backend. -->
        <productname>Postgres</productname>バックエンドからの明示的な問い合わせ計画です。

       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><computeroutput>
EXPLAIN
       </computeroutput></term>
      <listitem>
       <para>
	<!-- Flag sent after query plan is shown. -->
        問い合わせ計画の表示の後に送られるフラグです。 

       </para>
      </listitem>
     </varlistentry>
    </variablelist>
  </refsect2>
 </refsynopsisdiv>

 <refsect1 id="R1-SQL-EXPLAIN-1">
  <refsect1info>
   <date>1998-04-15</date>
  </refsect1info>
  <title>
   <!-- Description -->説明
  </title>

  <para>
   <!-- 
   This command displays the execution plan that the Postgres planner
   generates for the supplied query.  The execution plan shows how
   the table(s) referenced by the query will be scanned___by plain
   sequential scan, index scan, etc.___and if multiple tables are
   referenced, what join algorithms will be used to bring together
   the required tuples from each input table. -->

   このコマンドはPostgresプランナが与えられた問い合わせに対して作成する実行計画を表示します。実行計画はテーブルが、単純な順スキャンやインデックススキャンなどによってどのように問い合わせに参照されるか、そしてもし複数のテーブルが参照される場合、どの結合アルゴリズムがそれぞれの入力テーブルからの必要とされるタプルを結合するために使われるかを表示します。

  </para>

  <para>
   <!-- 
   The most critical part of the display is the estimated query execution
   cost, which is the planner's guess at how long it will take to run the
   query (measured in units of disk page fetches).  Actually two numbers
   are shown: the start-up time before the first tuple can be returned, and
   the total time to return all the tuples.  For most queries the total time
   is what matters, but in contexts such as an EXISTS sub-query the planner
   will choose the smallest start-up time instead of the smallest total time
   (since the executor will stop after getting one tuple, anyway).
   Also, if you limit the number of tuples to return with a LIMIT clause,
   the planner makes an appropriate interpolation between the endpoint
   costs to estimate which plan is really the cheapest. -->

   表示の中で最も重要な部分は概算された問い合わせ実行コストで、これはプランナが問い合わせを実行するのにどれくらい時間がかかるか（ディスクページ取り出しのユニットで計算されます）を推量したものです。実際は2つの数字が表示されます。最初のタプルが返される前の始める時間、そしてすべてのタプルが返されるまでの合計の時間です。ほとんどの問い合わせにとって重要なのは合計時間ですが、EXISTS副問い合わせなどのようなコンテクストではプランナは最少の合計時間の代わりに最少の開始時間を選びます（なぜならエクゼキュータはどのみち1つのタプルを得ると停止するからです）。さらに、もしLIMIT句で返すタプル数を制限する場合、プランナはどの計画が一番低コストになるかを概算するため処理の終了までにでふさわしい書き換えを行います。

  </para>

  <para>
   <!-- 
   The VERBOSE option emits the full internal representation of the plan tree,
   rather than just a summary (and sends it to the postmaster log file, too).
   Usually this option is only useful for debugging Postgres. -->

   VERBOSEオプションはただの要約だけではなく、完全な計画ツリーの内部表現を出力します（そしてpostmasterログファイルにも送ります）。通常はこのオプションはPostgresのデバッグにのみ役立ちます。

  </para>

  <refsect2 id="R2-SQL-EXPLAIN-3">
   <refsect2info>
    <date>1998-04-15</date>
   </refsect2info>
   <title>
    <!-- Notes -->注釈
   </title>
   <para>
    <!-- 
    There is only sparse documentation on the optimizer's use of cost
    information in <productname>Postgres</productname>.
    General information on cost estimation for query optimization
    can be found in database textbooks.
    Refer to the <citetitle>Programmer's Guide</citetitle>
    in the chapters on indexes and the genetic query optimizer for
    more information. -->

    <productname>Postgres</productname>のコスト情報のオプティマイザの使用に関するドキュメントは多くありません。問い合わせ最適化のコスト概算に関する一般的な情報はデータベースの教科書に書いてあります。さらに詳しい情報は、<citetitle>&programmer-guide;</citetitle>の遺伝的問い合わせオプティマイザとインデックスの章を参照してください。
    
   </para>
  </refsect2>
 </refsect1>

 <refsect1 id="R1-SQL-EXPLAIN-2">
  <title>
   <!-- Usage -->使用方法
  </title>

  <para>
   <!-- 
   To show a query plan for a simple query on a table with a single
   <type>int4</type> column and 128 rows: -->

   下記は、1つの<type>int4</type>列と128行を持つテーブル上の単純な問い合わせの問い合わせ計画を表示します。
</para>

<programlisting>
EXPLAIN SELECT * FROM foo;
<computeroutput>NOTICE:  QUERY PLAN:

Seq Scan on foo  (cost=0.00..2.28 rows=128 width=4)

EXPLAIN</computeroutput>
</programlisting>

  <para>
   <!-- For the same table with an index to support an
   <firstterm>equijoin</firstterm> condition on the query,
   <command>EXPLAIN</command> will show a different plan: -->

   インデックスを持つ同じテーブルが、問い合わせで<firstterm>equijoin</firstterm>条件をサポートするために、<command>EXPLAIN</command>は異なる計画を表示します。
</para>

<programlisting>
EXPLAIN SELECT * FROM foo WHERE i = 4;
<computeroutput>NOTICE:  QUERY PLAN:

Index Scan using fi on foo  (cost=0.00..0.42 rows=1 width=4)

EXPLAIN</computeroutput>
</programlisting>

  <para>
   <!-- 
   And finally, for the same table with an index to support an
   <firstterm>equijoin</firstterm> condition on the query,
   <command>EXPLAIN</command> will show the following for a query
   using an aggregate function: -->

   そして最後に、インデックスを持つ同じテーブルが、問い合わせで<firstterm>equijoin</firstterm>条件をサポートするために、<command>EXPLAIN</command>は集約関数を使った問い合わせとして下記を表示します。
</para>

<programlisting>
EXPLAIN SELECT sum(i) FROM foo WHERE i = 4;
<computeroutput>NOTICE:  QUERY PLAN:

Aggregate  (cost=0.42..0.42 rows=1 width=4)
  ->  Index Scan using fi on foo  (cost=0.00..0.42 rows=1 width=4)</computeroutput>
</programlisting>

  <para>
   <!-- 
   Note that the specific numbers shown, and even the selected query
   strategy, may vary between Postgres releases due to planner improvements.
   -->

   特定の表示される数字、そして選択された問い合わせ戦略さえも、プランナの改良によってPostgresのリリース間で異なることに注意してください。

  </para>
 </refsect1>

 <refsect1 id="R1-SQL-EXPLAIN-3">
  <title>
   <!-- Compatibility -->互換性
  </title>

  <refsect2 id="R2-SQL-EXPLAIN-4">
   <refsect2info>
    <date>1998-09-01</date>
   </refsect2info>
   <title>
    SQL92
   </title>
   <para>
    <!-- There is no <command>EXPLAIN</command> statement defined in SQL92.
    -->

    SQL92では<command>EXPLAIN</command>文は定義されていません。

   </para>
  </refsect2>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:"/usr/lib/sgml/catalog"
sgml-local-ecat-files:nil
End:
-->
