mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-31 15:37:24 +02:00
171 lines
6.0 KiB
Plaintext
171 lines
6.0 KiB
Plaintext
<!--
|
|
$PostgreSQL: pgsql/doc/src/sgml/ref/analyze.sgml,v 1.20 2006/09/16 00:30:16 momjian Exp $
|
|
PostgreSQL documentation
|
|
-->
|
|
|
|
<refentry id="SQL-ANALYZE">
|
|
<refmeta>
|
|
<refentrytitle id="sql-analyze-title">ANALYZE</refentrytitle>
|
|
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
<refname>ANALYZE</refname>
|
|
<refpurpose>collect statistics about a database</refpurpose>
|
|
</refnamediv>
|
|
|
|
<indexterm zone="sql-analyze">
|
|
<primary>ANALYZE</primary>
|
|
</indexterm>
|
|
|
|
<refsynopsisdiv>
|
|
<synopsis>
|
|
ANALYZE [ VERBOSE ] [ <replaceable class="PARAMETER">table</replaceable> [ (<replaceable class="PARAMETER">column</replaceable> [, ...] ) ] ]
|
|
</synopsis>
|
|
</refsynopsisdiv>
|
|
|
|
<refsect1>
|
|
<title>Description</title>
|
|
|
|
<para>
|
|
<command>ANALYZE</command> collects statistics about the contents
|
|
of tables in the database, and stores the results in the system
|
|
table <literal>pg_statistic</literal>. Subsequently, the query
|
|
planner uses these statistics to help determine the most efficient
|
|
execution plans for queries.
|
|
</para>
|
|
|
|
<para>
|
|
With no parameter, <command>ANALYZE</command> examines every table in the
|
|
current database. With a parameter, <command>ANALYZE</command> examines
|
|
only that table. It is further possible to give a list of column names,
|
|
in which case only the statistics for those columns are collected.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Parameters</title>
|
|
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><literal>VERBOSE</literal></term>
|
|
<listitem>
|
|
<para>
|
|
Enables display of progress messages.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><replaceable class="PARAMETER">table</replaceable></term>
|
|
<listitem>
|
|
<para>
|
|
The name (possibly schema-qualified) of a specific table to
|
|
analyze. Defaults to all tables in the current database.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><replaceable class="PARAMETER">column</replaceable></term>
|
|
<listitem>
|
|
<para>
|
|
The name of a specific column to analyze. Defaults to all columns.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Outputs</title>
|
|
|
|
<para>
|
|
When <literal>VERBOSE</> is specified, <command>ANALYZE</> emits
|
|
progress messages to indicate which table is currently being
|
|
processed. Various statistics about the tables are printed as well.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Notes</title>
|
|
|
|
<para>
|
|
It is a good idea to run <command>ANALYZE</command> periodically, or
|
|
just after making major changes in the contents of a table. Accurate
|
|
statistics will help the planner to choose the most appropriate query
|
|
plan, and thereby improve the speed of query processing. A common
|
|
strategy is to run <xref linkend="sql-vacuum" endterm="sql-vacuum-title">
|
|
and <command>ANALYZE</command> once a day during a low-usage time of day.
|
|
</para>
|
|
|
|
<para>
|
|
Unlike <command>VACUUM FULL</command>, <command>ANALYZE</command>
|
|
requires only a read lock on the target table, so it can run in
|
|
parallel with other activity on the table.
|
|
</para>
|
|
|
|
<para>
|
|
The statistics collected by <command>ANALYZE</command> usually
|
|
include a list of some of the most common values in each column and
|
|
a histogram showing the approximate data distribution in each
|
|
column. One or both of these may be omitted if
|
|
<command>ANALYZE</command> deems them uninteresting (for example,
|
|
in a unique-key column, there are no common values) or if the
|
|
column data type does not support the appropriate operators. There
|
|
is more information about the statistics in <xref
|
|
linkend="maintenance">.
|
|
</para>
|
|
|
|
<para>
|
|
For large tables, <command>ANALYZE</command> takes a random sample
|
|
of the table contents, rather than examining every row. This
|
|
allows even very large tables to be analyzed in a small amount of
|
|
time. Note, however, that the statistics are only approximate, and
|
|
will change slightly each time <command>ANALYZE</command> is run,
|
|
even if the actual table contents did not change. This may result
|
|
in small changes in the planner's estimated costs shown by
|
|
<command>EXPLAIN</command>. In rare situations, this
|
|
non-determinism will cause the query optimizer to choose a
|
|
different query plan between runs of <command>ANALYZE</command>. To
|
|
avoid this, raise the amount of statistics collected by
|
|
<command>ANALYZE</command>, as described below.
|
|
</para>
|
|
|
|
<para>
|
|
The extent of analysis can be controlled by adjusting the
|
|
<xref linkend="guc-default-statistics-target"> configuration variable, or
|
|
on a column-by-column basis by setting the per-column statistics
|
|
target with <command>ALTER TABLE ... ALTER COLUMN ... SET
|
|
STATISTICS</command> (see <xref linkend="sql-altertable"
|
|
endterm="sql-altertable-title">). The target value sets the
|
|
maximum number of entries in the most-common-value list and the
|
|
maximum number of bins in the histogram. The default target value
|
|
is 10, but this can be adjusted up or down to trade off accuracy of
|
|
planner estimates against the time taken for
|
|
<command>ANALYZE</command> and the amount of space occupied in
|
|
<literal>pg_statistic</literal>. In particular, setting the
|
|
statistics target to zero disables collection of statistics for
|
|
that column. It may be useful to do that for columns that are
|
|
never used as part of the <literal>WHERE</>, <literal>GROUP BY</>,
|
|
or <literal>ORDER BY</> clauses of queries, since the planner will
|
|
have no use for statistics on such columns.
|
|
</para>
|
|
|
|
<para>
|
|
The largest statistics target among the columns being analyzed determines
|
|
the number of table rows sampled to prepare the statistics. Increasing
|
|
the target causes a proportional increase in the time and space needed
|
|
to do <command>ANALYZE</command>.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1>
|
|
<title>Compatibility</title>
|
|
|
|
<para>
|
|
There is no <command>ANALYZE</command> statement in the SQL standard.
|
|
</para>
|
|
</refsect1>
|
|
</refentry>
|