aboutsummaryrefslogtreecommitdiff
path: root/src/man/explain.l
blob: 4e49254061c2eaf450984181eaa86014f945d67e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
.\" This is -*-nroff-*-
.\" XXX standard disclaimer belongs here....
.\" $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
.nf
\fBexplain [verbose]\fR query
.fi
.SH DESCRIPTION
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.