explain.l 2.1 KB
Newer Older
B
Bruce Momjian 已提交
1 2
.\" This is -*-nroff-*-
.\" XXX standard disclaimer belongs here....
3
.\" $Header: /cvsroot/pgsql/src/man/Attic/explain.l,v 1.11 1999/04/23 21:23:49 momjian Exp $
4
.TH EXPLAIN SQL 06/12/97 PostgreSQL PostgreSQL
B
Bruce Momjian 已提交
5
.SH NAME
B
Bruce Momjian 已提交
6
explain - explains statement execution details
B
Bruce Momjian 已提交
7 8
.SH SYNOPSIS
.nf
9
\fBexplain [verbose]\fR query
B
Bruce Momjian 已提交
10 11 12
.fi
.SH DESCRIPTION
This command outputs details about the supplied query.  The default
13 14 15 16
output is the computed query cost.  The cost value is only meaningful to
the optimizer in comparing various query plans. \f2verbose\f1 displays
the full query plan and cost to your screen, and pretty-prints the plan
to the postmaster log file.
17 18 19 20

.SH EXAMPLES
In the examples, the table has a single column of float4.
\fBcost\fR is the cost of scanning a base/join relation,
21
\fBrows\fR is the expected number of rows from a scan,
22 23 24 25 26 27
\fBwidth\fR is the length of a tuple.

.nf
tgl=> explain select a from test\g
NOTICE:QUERY PLAN:

28
Seq Scan on test  (cost=0.00 rows=0 width=4)
29 30 31 32 33

EXPLAIN
tgl=> explain verbose select sum(a) from test;
NOTICE:QUERY PLAN:

B
Bruce Momjian 已提交
34
{AGG :cost 0 :size 0 :width 0 :state <> :qptargetlist
35
 ({TLE :resdom {RESDOM :resno 1 :restype 700 :restypmod 4 :resname "sum"
36 37 38
   :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}}})
B
Bruce Momjian 已提交
39
 :qpqual <> :lefttree {SEQSCAN :cost 0 :size 0 :width 4 :state <>
40
  :qptargetlist ({TLE :resdom {RESDOM :resno 1 :restype 700 :restypmod 4
41 42
   :resname "null" :reskey 0 :reskeyop 0 :resjunk 0}
  :expr {VAR :varno 1 :varattno 1 :vartype 700 :varnoold 1 :varoattno 1}})
B
Bruce Momjian 已提交
43
 :qpqual <> :lefttree <> :righttree <> :scanrelid 1} :righttree <> :numagg 1 }
44

45 46
Aggregate  (cost=0.00 rows=0 width=0)
  ->   Seq Scan on test  (cost=0.00 rows=0 width=4)
47 48 49 50 51 52 53 54 55 56 57 58 59 60
.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

B
Bruce Momjian 已提交
61 62 63
.PP
The query cost and plan can be affected by running vacuum.