Commit 1b41965d authored by Neil Conway's avatar Neil Conway

Remove some verbiage describing how min() and max() are slow when applied

to the entire table: as of current sources, they are no longer slow
provided there is an index on the column.
parent dd2894df
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.249 2005/05/23 01:29:54 neilc Exp $ $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.250 2005/05/23 01:50:01 neilc Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -7317,55 +7317,16 @@ SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...; ...@@ -7317,55 +7317,16 @@ SELECT b1 = ANY((SELECT b2 FROM t2 ...)) FROM t1 ...;
<note> <note>
<para> <para>
Users accustomed to working with other SQL database management Users accustomed to working with other SQL database management
systems may be surprised by the performance characteristics of systems may be surprised by the performance of the
certain aggregate functions in <function>count</function> aggregate when it is applied to the
<productname>PostgreSQL</productname> when the aggregate is entire table. A query like:
applied to the entire table (in other words, no
<literal>WHERE</literal> clause is specified). In particular, a
query like
<programlisting> <programlisting>
SELECT min(col) FROM sometable; SELECT count(*) FROM sometable;
</programlisting> </programlisting>
will be executed by <productname>PostgreSQL</productname> using a will be executed by <productname>PostgreSQL</productname> using a
sequential scan of the entire table. Other database systems may sequential scan of the entire table.
optimize queries of this form to use an index on the column, if
one is available. Similarly, the aggregate functions
<function>max()</function> and <function>count()</function> always
require a sequential scan if applied to the entire table in
<productname>PostgreSQL</productname>.
</para>
<para>
<productname>PostgreSQL</productname> cannot easily implement this
optimization because it also allows for user-defined aggregate
queries. Since <function>min()</function>,
<function>max()</function>, and <function>count()</function> are
defined using a generic API for aggregate functions, there is no
provision for special-casing the execution of these functions
under certain circumstances.
</para>
<para>
Fortunately, there is a simple workaround for
<function>min()</function> and <function>max()</function>. The
query shown below is equivalent to the query above, except that it
can take advantage of a B-tree index if there is one present on
the column in question.
<programlisting>
SELECT col FROM sometable ORDER BY col ASC LIMIT 1;
</programlisting>
A similar query (obtained by substituting <literal>DESC</literal>
for <literal>ASC</literal> in the query above) can be used in the
place of <function>max()</function>.
</para>
<para>
Unfortunately, there is no similarly trivial workaround that can
be used to improve the performance of <function>count()</function>
when applied to the entire table.
</para> </para>
</note> </note>
</sect1> </sect1>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment