|
|
|
@ -1,7 +1,7 @@ |
|
|
|
|
.\" This is -*-nroff-*- |
|
|
|
|
.\" XXX standard disclaimer belongs here.... |
|
|
|
|
.\" $Header: /cvsroot/pgsql/src/man/Attic/explain.l,v 1.4 1997/01/16 14:56:59 momjian Exp $ |
|
|
|
|
.TH EXPLAIN SQL 11/05/95 PostgreSQL PostgreSQL |
|
|
|
|
.\" $Header: /cvsroot/pgsql/src/man/Attic/explain.l,v 1.5 1997/06/12 23:45:54 thomas Exp $ |
|
|
|
|
.TH EXPLAIN SQL 06/12/97 PostgreSQL PostgreSQL |
|
|
|
|
.SH NAME |
|
|
|
|
explain \(em explains statement execution details |
|
|
|
|
.SH SYNOPSIS |
|
|
|
@ -12,6 +12,50 @@ explain \(em explains statement execution details |
|
|
|
|
This command outputs details about the supplied query. The default |
|
|
|
|
output is the computed query cost. \f2verbose\f1 displays the full query |
|
|
|
|
plan and cost. |
|
|
|
|
|
|
|
|
|
.SH EXAMPLES |
|
|
|
|
In the examples, the table has a single column of float4. |
|
|
|
|
\fBcost\fR is the cost of scanning a base/join relation, |
|
|
|
|
\fBsize\fR is the expected number of tuples from a scan, |
|
|
|
|
\fBwidth\fR is the length of a tuple. |
|
|
|
|
|
|
|
|
|
.nf |
|
|
|
|
tgl=> explain select a from test\g |
|
|
|
|
NOTICE:QUERY PLAN: |
|
|
|
|
|
|
|
|
|
Seq Scan on test (cost=0.00 size=0 width=4) |
|
|
|
|
|
|
|
|
|
EXPLAIN |
|
|
|
|
tgl=> explain verbose select sum(a) from test; |
|
|
|
|
NOTICE:QUERY PLAN: |
|
|
|
|
|
|
|
|
|
{AGG :cost 0 :size 0 :width 0 :state nil :qptargetlist |
|
|
|
|
({TLE :resdom {RESDOM :resno 1 :restype 700 :reslen 4 :resname "sum" |
|
|
|
|
:reskey 0 :reskeyop 0 :resjunk 0} |
|
|
|
|
:expr {AGGREG :aggname "sum" :basetype 700 :aggtype 700 :aggno 0 |
|
|
|
|
:target {VAR :varno 1 :varattno 1 :vartype 700 :varnoold 1 :varoattno 1}}}) |
|
|
|
|
:qpqual nil :lefttree {SEQSCAN :cost 0 :size 0 :width 4 :state nil |
|
|
|
|
:qptargetlist ({TLE :resdom {RESDOM :resno 1 :restype 700 :reslen 4 |
|
|
|
|
:resname "null" :reskey 0 :reskeyop 0 :resjunk 0} |
|
|
|
|
:expr {VAR :varno 1 :varattno 1 :vartype 700 :varnoold 1 :varoattno 1}}) |
|
|
|
|
:qpqual nil :lefttree nil :righttree nil :scanrelid 1} :righttree nil :numagg 1 } |
|
|
|
|
|
|
|
|
|
Aggregate (cost=0.00 size=0 width=0) |
|
|
|
|
-> Seq Scan on test (cost=0.00 size=0 width=4) |
|
|
|
|
.fi |
|
|
|
|
|
|
|
|
|
The Postgres optimizer has chosen to use a sequential scan to retrieve rows from |
|
|
|
|
this table. Indices will used by the optimizer |
|
|
|
|
after tables grow large enough to warrant the access |
|
|
|
|
overhead; typically this might happen when tables have a few hundred rows. |
|
|
|
|
|
|
|
|
|
.SH "SEE ALSO" |
|
|
|
|
delete(l), |
|
|
|
|
insert(l), |
|
|
|
|
select(l). |
|
|
|
|
|
|
|
|
|
.SH BUGS |
|
|
|
|
|
|
|
|
|
.PP |
|
|
|
|
The query cost and plan can be affected by running vacuum. |
|
|
|
|
|
|
|
|
|