<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/explain.sgml,v 1.8 1999/07/22 15:09:12 thomas 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 details
  </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>
   <para>

    <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>
   </para>
  </refsect2>

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

    <variablelist>
     <varlistentry>
      <term><computeroutput>
NOTICE:  QUERY PLAN:
<replaceable>plan</replaceable>
      </computeroutput></term>
      <listitem>
       <para>
	Explicit query plan from the <productname>Postgres</productname> backend.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><computeroutput>
EXPLAIN
       </computeroutput></term>
      <listitem>
       <para>
	Flag sent after query plan is shown.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </para>
  </refsect2>
 </refsynopsisdiv>

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

  <para>
   This command outputs details about the supplied query.
   The default output is the computed query cost. 
   The cost value is only meaningful to the optimizer in comparing
   various query plans.
   VERBOSE displays the full query plan and cost to your screen,
   and pretty-prints the plan to the postmaster log file.   
  </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.
   </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:

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

Seq Scan on foo  (cost=5.22 rows=128 width=4)

EXPLAIN
    </computeroutput>
   </programlisting>
  </para>

  <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:

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

Index Scan using fi on foo  (cost=2.05 rows=1 width=4)

EXPLAIN
    </computeroutput>
   </programlisting>
  </para>

  <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:

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

Aggregate  (cost=2.05 rows=1 width=4)
  ->  Index Scan using fi on foo  (cost=2.05 rows=1 width=4)
    </computeroutput>
   </programlisting>
  </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.
   </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:
-->
