aboutsummaryrefslogtreecommitdiff
path: root/doc/src/sgml/ref/cluster.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/ref/cluster.sgml')
-rw-r--r--doc/src/sgml/ref/cluster.sgml423
1 files changed, 208 insertions, 215 deletions
diff --git a/doc/src/sgml/ref/cluster.sgml b/doc/src/sgml/ref/cluster.sgml
index c49354478b6..bfae55585e5 100644
--- a/doc/src/sgml/ref/cluster.sgml
+++ b/doc/src/sgml/ref/cluster.sgml
@@ -1,238 +1,231 @@
-<REFENTRY ID="SQL-CLUSTER">
- <REFMETA>
- <REFENTRYTITLE>
- CLUSTER
- </REFENTRYTITLE>
- <REFMISCINFO>SQL - Language Statements</REFMISCINFO>
- </REFMETA>
- <REFNAMEDIV>
- <REFNAME>
- CLUSTER
- </REFNAME>
- <REFPURPOSE>
- Gives storage clustering advice to the backend
- </REFPURPOSE>
+<refentry id="SQL-CLUSTER">
+ <refmeta>
+ <refentrytitle>
+ CLUSTER
+ </refentrytitle>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+ <refnamediv>
+ <refname>
+ CLUSTER
+ </refname>
+ <refpurpose>
+ Gives storage clustering advice to the backend
+ </refpurpose>
</refnamediv>
- <REFSYNOPSISDIV>
- <REFSYNOPSISDIVINFO>
- <DATE>1998-09-08</DATE>
- </REFSYNOPSISDIVINFO>
- <SYNOPSIS>
- CLUSTER <REPLACEABLE CLASS="PARAMETER">indexname</REPLACEABLE> ON <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE>
- </SYNOPSIS>
-
- <REFSECT2 ID="R2-SQL-CLUSTER-1">
- <REFSECT2INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT2INFO>
- <TITLE>
- Inputs
- </TITLE>
- <PARA>
- </PARA>
- <VARIABLELIST>
- <VARLISTENTRY>
- <TERM>
- <REPLACEABLE CLASS="PARAMETER">indexname</REPLACEABLE>
- </TERM>
- <LISTITEM>
- <PARA>
- The name of an index.
- </PARA>
- </LISTITEM>
- </VARLISTENTRY>
- <VARLISTENTRY>
- <TERM>
- <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE>
- </TERM>
- <LISTITEM>
- <PARA>
- The name of a table.
- </PARA>
- </LISTITEM>
- </VARLISTENTRY>
- </VARIABLELIST>
- </REFSECT2>
-
- <REFSECT2 ID="R2-SQL-CLUSTER-2">
- <REFSECT2INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT2INFO>
- <TITLE>
- Outputs
- </TITLE>
- <PARA>
- <VARIABLELIST>
- <VARLISTENTRY>
- <TERM>
- <returnvalue>CLUSTER</returnvalue>
- </TERM>
- <LISTITEM>
- <PARA>
- The clustering was done successfully.
- </PARA>
- </LISTITEM>
- </VARLISTENTRY>
- <VARLISTENTRY>
- <TERM>
-<returnvalue>ERROR: relation &lt;<REPLACEABLE CLASS="PARAMETER">tablerelation_number</REPLACEABLE>&gt; inherits "invoice"</returnvalue>
- </TERM>
- <LISTITEM>
- <PARA>
+ <refsynopsisdiv>
+ <refsynopsisdivinfo>
+ <date>1998-09-08</date>
+ </refsynopsisdivinfo>
+ <synopsis>
+CLUSTER <replaceable class="PARAMETER">indexname</replaceable> ON <replaceable class="PARAMETER">table</replaceable>
+ </synopsis>
- <comment>
- This is not documented anywhere. It seems not to be possible to
- cluster a table that is inherited.
- </comment>
- </PARA>
- </LISTITEM>
- </VARLISTENTRY>
- <VARLISTENTRY>
- <TERM>
- <returnvalue>ERROR: Relation x does not exist!</returnvalue>
- </TERM>
- <LISTITEM>
- <PARA>
+ <refsect2 id="R2-SQL-CLUSTER-1">
+ <refsect2info>
+ <date>1998-09-08</date>
+ </refsect2info>
+ <title>
+ Inputs
+ </title>
+ <para>
+ </para>
+ <variablelist>
+ <varlistentry>
+ <term><replaceable class="PARAMETER">indexname</replaceable></term>
+ <listitem>
+ <para>
+ The name of an index.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable class="PARAMETER">table</replaceable></term>
+ <listitem>
+ <para>
+ The name of a table.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect2>
+
+ <refsect2 id="R2-SQL-CLUSTER-2">
+ <refsect2info>
+ <date>1998-09-08</date>
+ </refsect2info>
+ <title>
+ Outputs
+ </title>
+ <para>
+
+ <variablelist>
+ <varlistentry>
+ <term><computeroutput>
+CLUSTER
+ </computeroutput></term>
+ <listitem>
+ <para>
+ The clustering was done successfully.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><computeroutput>
+ERROR: relation &lt;<replaceable class="PARAMETER">tablerelation_number</replaceable>&gt; inherits "invoice"
+ </computeroutput></term>
+ <listitem>
+ <para>
+ <comment>
+ This is not documented anywhere. It seems not to be possible to
+ cluster a table that is inherited.
+ </comment>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><computeroutput>
+ERROR: Relation x does not exist!
+ </computeroutput></term>
+ <listitem>
+ <para>
+ <comment>
+ The relation complained of was not shown in the error message,
+ which contained a random string instead of the relation name.
+ </comment>
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </para>
+ </refsect2>
+ </refsynopsisdiv>
+
+ <refsect1 id="R1-SQL-CLUSTER-1">
+ <refsect1info>
+ <date>1998-09-08</date>
+ </refsect1info>
+ <title>
+ Description
+ </title>
+ <para>
+ <command>CLUSTER</command> instructs <productname>Postgres</productname>
+ to cluster the class specified
+ by <replaceable class="parameter">classname</replaceable> approximately
+ based on the index specified by
+ <replaceable class="parameter">indexname</replaceable>. The index must
+ already have been defined on
+ <replaceable class="parameter">classname</replaceable>.
+ </para>
+ <para>
+ When a class is clustered, it is physically reordered
+ based on the index information. The clustering is static.
+ In other words, as the class is updated, the changes are
+ not clustered. No attempt is made to keep new instances or
+ updated tuples clustered. If one wishes, one can
+ recluster manually by issuing the command again.
+ </para>
+
+ <refsect2 id="R2-SQL-CLUSTER-3">
+ <refsect2info>
+ <date>1998-09-08</date>
+ </refsect2info>
+ <title>
+ Notes
+ </title>
+
+ <para>
+ The table is actually copied to a temporary table in index
+ order, then renamed back to the original name. For this
+ reason, all grant permissions and other indexes are lost
+ when clustering is performed.
+ </para>
- <comment>
- The relation complained of was not shown in the error message,
- which contained a random string instead of the relation name.
- </comment>
- </PARA>
- </LISTITEM>
- </VARLISTENTRY>
+ <para>
+ In cases where you are accessing single rows randomly
+ within a table, the actual order of the data in the heap
+ table is unimportant. However, if you tend to access some
+ data more than others, and there is an index that groups
+ them together, you will benefit from using <command>CLUSTER</command>.
+ </para>
+
+ <para>
+ Another place <command>CLUSTER</command> is helpful is in cases where you use an
+ index to pull out several rows from a table. If you are
+ requesting a range of indexed values from a table, or a
+ single indexed value that has multiple rows that match,
+ <command>CLUSTER</command> will help because once the index identifies the
+ heap page for the first row that matches, all other rows
+ that match are probably already on the same heap page,
+ saving disk accesses and speeding up the query.
+ </para>
- </VARIABLELIST>
+ <para>
+ There are two ways to cluster data. The first is with the
+ <command>CLUSTER</command> command, which reorders the original table with
+ the ordering of the index you specify. This can be slow
+ on large tables because the rows are fetched from the heap
+ in index order, and if the heap table is unordered, the
+ entries are on random pages, so there is one disk page
+ retrieved for every row moved. <productname>Postgres</productname> has a cache,
+ but the majority of a big table will not fit in the cache.
</para>
- </REFSECT2>
- </REFSYNOPSISDIV>
-
- <REFSECT1 ID="R1-SQL-CLUSTER-1">
- <REFSECT1INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT1INFO>
- <TITLE>
- Description
- </TITLE>
- <PARA>
- <command>CLUSTER</command> instructs <productname>Postgres</productname>
-to cluster the class specified
- by <replaceable class="parameter">classname</replaceable> approximately
- based on the index specified by
- <replaceable class="parameter">indexname</replaceable>. The index must
- already have been defined on
-<replaceable class="parameter">classname</replaceable>.
- </PARA>
- <para>
- When a class is clustered, it is physically reordered
- based on the index information. The clustering is static.
- In other words, as the class is updated, the changes are
- not clustered. No attempt is made to keep new instances or
- updated tuples clustered. If one wishes, one can
- recluster manually by issuing the command again.
- </para>
-
- <REFSECT2 ID="R2-SQL-CLUSTER-3">
- <REFSECT2INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT2INFO>
- <TITLE>
- Notes
- </TITLE>
-
- <para>
- The table is actually copied to a temporary table in index
- order, then renamed back to the original name. For this
- reason, all grant permissions and other indexes are lost
- when clustering is performed.
- </para>
-
- <para>
- In cases where you are accessing single rows randomly
- within a table, the actual order of the data in the heap
- table is unimportant. However, if you tend to access some
- data more than others, and there is an index that groups
- them together, you will benefit from using <command>CLUSTER</command>.
- </para>
-
- <para>
- Another place <command>CLUSTER</command> is helpful is in cases where you use an
- index to pull out several rows from a table. If you are
- requesting a range of indexed values from a table, or a
- single indexed value that has multiple rows that match,
- <command>CLUSTER</command> will help because once the index identifies the
- heap page for the first row that matches, all other rows
- that match are probably already on the same heap page,
- saving disk accesses and speeding up the query.
- </para>
-
- <para>
- There are two ways to cluster data. The first is with the
- <command>CLUSTER</command> command, which reorders the original table with
- the ordering of the index you specify. This can be slow
- on large tables because the rows are fetched from the heap
- in index order, and if the heap table is unordered, the
- entries are on random pages, so there is one disk page
- retrieved for every row moved. <productname>Postgres</productname> has a cache,
- but the majority of a big table will not fit in the cache.
- </para>
-
- <para>
- Another way to cluster data is to use
-<programlisting>
+
+ <para>
+ Another way to cluster data is to use
+ <programlisting>
SELECT ... INTO TABLE <replaceable class="parameter">temp</replaceable> FROM ... ORDER BY ...
-</programlisting>
- This uses the <productname>Postgres</productname> sorting code in
- ORDER BY to match the index, and is much faster for
- unordered data. You then drop the old table, use
-<command>ALTER TABLE/RENAME</command>
- to rename <replaceable class="parameter">temp</replaceable> to the old name, and
- recreate any indexes. The only problem is that <acronym>OID</acronym>s
- will not be preserved. From then on, <command>CLUSTER</command> should be
- fast because most of the heap data has already been
- ordered, and the existing index is used.
+ </programlisting>
+ This uses the <productname>Postgres</productname> sorting code in
+ ORDER BY to match the index, and is much faster for
+ unordered data. You then drop the old table, use
+ <command>ALTER TABLE/RENAME</command>
+ to rename <replaceable class="parameter">temp</replaceable> to the old name, and
+ recreate any indexes. The only problem is that <acronym>OID</acronym>s
+ will not be preserved. From then on, <command>CLUSTER</command> should be
+ fast because most of the heap data has already been
+ ordered, and the existing index is used.
</para>
</refsect2>
</refsect1>
-
- <REFSECT1 ID="R1-SQL-CLUSTER-2">
- <TITLE>
+
+ <refsect1 id="R1-SQL-CLUSTER-2">
+ <title>
Usage
- </TITLE>
- <PARA>
+ </title>
+ <para>
Cluster the employees relation on the basis of its salary attribute
- </PARA>
- <ProgramListing>
- CLUSTER emp_ind ON emp
- </ProgramListing>
- </REFSECT1>
-
- <REFSECT1 ID="R1-SQL-CLUSTER-3">
- <TITLE>
+ </para>
+ <programlisting>
+CLUSTER emp_ind ON emp;
+ </programlisting>
+ </refsect1>
+
+ <refsect1 id="R1-SQL-CLUSTER-3">
+ <title>
Compatibility
- </TITLE>
- <PARA>
- </PARA>
-
- <REFSECT2 ID="R2-SQL-CLUSTER-4">
- <REFSECT2INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT2INFO>
- <TITLE>
+ </title>
+ <para>
+ </para>
+
+ <refsect2 id="R2-SQL-CLUSTER-4">
+ <refsect2info>
+ <date>1998-09-08</date>
+ </refsect2info>
+ <title>
SQL92
- </TITLE>
- <PARA>
+ </title>
+ <para>
There is no <command>CLUSTER</command> statement in SQL92.
- </PARA>
+ </para>
</refsect2>
</refsect1>
-</REFENTRY>
-
+</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
-sgml-omittag:t
+sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t