<refentry id="SQL-EXPLAIN">
 <refmeta>
  <refentrytitle>
   EXPLAIN
  </refentrytitle>
  <refmiscinfo>SQL - Language Statements</refmiscinfo>
 </refmeta>
 <refnamediv>
  <refname>
   EXPLAIN
  </refname>
  <refpurpose>
   Shows statement execution details
  </refpurpose>
 </refnamediv>

 <refsynopsisdiv>
  <refsynopsisdivinfo>
   <date>1998-09-01</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:

   <programlisting>
EXPLAIN select * from foo;
NOTICE:  QUERY PLAN:

Seq Scan on foo  (cost=0.00 rows=0 width=4)

EXPLAIN
   </programlisting>
  </para>
 </refsect1>

 <refsect1 id="R1-SQL-EXPLAIN-3">
  <title>
   Compatibility
  </title>
  <para>
  </para>

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