Update obsolete info in CREATE INDEX ref page. (I had fixed the text
description in indices.sgml, but missed the near-duplicate prose in the reference page...)
This commit is contained in:
parent
97f0521d8e
commit
2ee858b5f0
@ -1,5 +1,5 @@
|
|||||||
<!--
|
<!--
|
||||||
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_index.sgml,v 1.11 2000/04/11 05:39:15 thomas Exp $
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_index.sgml,v 1.12 2000/04/23 02:08:33 tgl Exp $
|
||||||
Postgres documentation
|
Postgres documentation
|
||||||
-->
|
-->
|
||||||
|
|
||||||
@ -24,9 +24,9 @@ Postgres documentation
|
|||||||
</refsynopsisdivinfo>
|
</refsynopsisdivinfo>
|
||||||
<synopsis>
|
<synopsis>
|
||||||
CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable> ON <replaceable class="parameter">table</replaceable>
|
CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable> ON <replaceable class="parameter">table</replaceable>
|
||||||
[ USING <replaceable class="parameter">acc_name</replaceable> ] ( <replaceable class="parameter">column</replaceable> [ <replaceable class="parameter">ops_name</replaceable>] [, ...] )
|
[ USING <replaceable class="parameter">acc_name</replaceable> ] ( <replaceable class="parameter">column</replaceable> [ <replaceable class="parameter">ops_name</replaceable> ] [, ...] )
|
||||||
CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable> ON <replaceable class="parameter">table</replaceable>
|
CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable> ON <replaceable class="parameter">table</replaceable>
|
||||||
[ USING <replaceable class="parameter">acc_name</replaceable> ] ( <replaceable class="parameter">func_name</replaceable>( <replaceable class="parameter">col</replaceable> [, ... ]) <replaceable class="parameter">ops_name</replaceable> )
|
[ USING <replaceable class="parameter">acc_name</replaceable> ] ( <replaceable class="parameter">func_name</replaceable>( <replaceable class="parameter">column</replaceable> [, ... ]) [ <replaceable class="parameter">ops_name</replaceable> ] )
|
||||||
</synopsis>
|
</synopsis>
|
||||||
|
|
||||||
<refsect2 id="R2-SQL-CREATEINDEX-1">
|
<refsect2 id="R2-SQL-CREATEINDEX-1">
|
||||||
@ -74,16 +74,16 @@ CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable>
|
|||||||
<term><replaceable class="parameter">acc_name</replaceable></term>
|
<term><replaceable class="parameter">acc_name</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
the name of the access method which is to be used for
|
The name of the access method to be used for
|
||||||
the index. The default access method is BTREE.
|
the index. The default access method is BTREE.
|
||||||
Postgres provides three access methods for secondary indexes:
|
Postgres provides three access methods for indexes:
|
||||||
|
|
||||||
<variablelist>
|
<variablelist>
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term>BTREE</term>
|
<term>BTREE</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
an implementation of the Lehman-Yao
|
an implementation of Lehman-Yao
|
||||||
high-concurrency btrees.
|
high-concurrency btrees.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -133,8 +133,7 @@ CREATE [ UNIQUE ] INDEX <replaceable class="parameter">index_name</replaceable>
|
|||||||
<term><replaceable class="parameter">func_name</replaceable></term>
|
<term><replaceable class="parameter">func_name</replaceable></term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
A user-defined function, which returns a value that can
|
A function, which returns a value that can be indexed.
|
||||||
be indexed.
|
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -199,21 +198,15 @@ ERROR: Cannot create index: 'index_name' already exists.
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
In the first syntax shown above, the key fields for the
|
In the first syntax shown above, the key field(s) for the
|
||||||
index are specified as column names; a column may also have
|
index are specified as column names.
|
||||||
an associated operator class. An operator class is used
|
Multiple fields can be specified if the index access method supports
|
||||||
to specify the operators to be used for a particular
|
multi-column indexes.
|
||||||
index. For example, a btree index on four-byte integers
|
|
||||||
would use the <literal>int4_ops</literal> class;
|
|
||||||
this operator class includes
|
|
||||||
comparison functions for four-byte integers. The default
|
|
||||||
operator class is the appropriate operator class for that
|
|
||||||
field type.
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
In the second syntax shown above, an index is defined
|
In the second syntax shown above, an index is defined
|
||||||
on the result of a user-defined function
|
on the result of a user-specified function
|
||||||
<replaceable class="parameter">func_name</replaceable> applied
|
<replaceable class="parameter">func_name</replaceable> applied
|
||||||
to one or more attributes of a single class.
|
to one or more attributes of a single class.
|
||||||
These <firstterm>functional indices</firstterm>
|
These <firstterm>functional indices</firstterm>
|
||||||
@ -224,8 +217,8 @@ ERROR: Cannot create index: 'index_name' already exists.
|
|||||||
|
|
||||||
<para>
|
<para>
|
||||||
Postgres provides btree, rtree and hash access methods for
|
Postgres provides btree, rtree and hash access methods for
|
||||||
secondary indices. The btree access method is an implementation of
|
indices. The btree access method is an implementation of
|
||||||
the Lehman-Yao high-concurrency btrees. The rtree access method
|
Lehman-Yao high-concurrency btrees. The rtree access method
|
||||||
implements standard rtrees using Guttman's quadratic split algorithm.
|
implements standard rtrees using Guttman's quadratic split algorithm.
|
||||||
The hash access method is an implementation of Litwin's linear
|
The hash access method is an implementation of Litwin's linear
|
||||||
hashing. We mention the algorithms used solely to indicate that all
|
hashing. We mention the algorithms used solely to indicate that all
|
||||||
@ -243,8 +236,9 @@ ERROR: Cannot create index: 'index_name' already exists.
|
|||||||
</title>
|
</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The Postgres query optimizer will consider using btree indices in a scan
|
The <productname>Postgres</productname>
|
||||||
whenever an indexed attribute is involved in a comparison using one of:
|
query optimizer will consider using a btree index whenever
|
||||||
|
an indexed attribute is involved in a comparison using one of:
|
||||||
|
|
||||||
<simplelist type="inline">
|
<simplelist type="inline">
|
||||||
<member><</member>
|
<member><</member>
|
||||||
@ -255,19 +249,6 @@ ERROR: Cannot create index: 'index_name' already exists.
|
|||||||
</simplelist>
|
</simplelist>
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
|
||||||
Both box classes support indices on the <literal>box</literal> data
|
|
||||||
type in <productname>Postgres</productname>.
|
|
||||||
The difference between them is that <literal>bigbox_ops</literal>
|
|
||||||
scales box coordinates down, to avoid floating point exceptions from
|
|
||||||
doing multiplication, addition, and subtraction on very large
|
|
||||||
floating-point coordinates. If the field on which your rectangles lie
|
|
||||||
is about 20,000 units square or larger, you should use
|
|
||||||
<literal>bigbox_ops</literal>.
|
|
||||||
The <literal>poly_ops</literal> operator class supports rtree
|
|
||||||
indices on <literal>polygon</literal> data.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <productname>Postgres</productname>
|
The <productname>Postgres</productname>
|
||||||
query optimizer will consider using an rtree index whenever
|
query optimizer will consider using an rtree index whenever
|
||||||
@ -292,26 +273,56 @@ ERROR: Cannot create index: 'index_name' already exists.
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Currently, only the BTREE access method supports multi-column
|
Currently, only the btree access method supports multi-column
|
||||||
indexes. Up to 7 keys may be specified.
|
indexes. Up to 16 keys may be specified by default (this limit
|
||||||
|
can be altered when building Postgres).
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Use <xref linkend="sql-dropindex-title" endterm="sql-dropindex-title">
|
An <firstterm>operator class</firstterm> can be specified for each
|
||||||
to remove an index.
|
column of an index. The operator class identifies the operators to
|
||||||
</para>
|
be used by the index for that column. For example, a btree index on
|
||||||
|
four-byte integers would use the <literal>int4_ops</literal> class;
|
||||||
|
this operator class includes comparison functions for four-byte
|
||||||
|
integers. In practice the default operator class for the field's
|
||||||
|
datatype is usually sufficient. The main point of having operator classes
|
||||||
|
is that for some datatypes, there could be more than one meaningful
|
||||||
|
ordering. For example, we might want to sort a complex-number datatype
|
||||||
|
either by absolute value or by real part. We could do this by defining
|
||||||
|
two operator classes for the datatype and then selecting the proper
|
||||||
|
class when making an index. There are also some operator classes with
|
||||||
|
special purposes:
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The operator classes <literal>box_ops</literal> and
|
||||||
|
<literal>bigbox_ops</literal> both support rtree indices on the
|
||||||
|
<literal>box</literal> datatype.
|
||||||
|
The difference between them is that <literal>bigbox_ops</literal>
|
||||||
|
scales box coordinates down, to avoid floating point exceptions from
|
||||||
|
doing multiplication, addition, and subtraction on very large
|
||||||
|
floating-point coordinates. If the field on which your rectangles lie
|
||||||
|
is about 20,000 units square or larger, you should use
|
||||||
|
<literal>bigbox_ops</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <literal>int24_ops</literal>
|
||||||
|
operator class is useful for constructing indices on int2 data, and
|
||||||
|
doing comparisons against int4 data in query qualifications.
|
||||||
|
Similarly, <literal>int42_ops</literal>
|
||||||
|
support indices on int4 data that is to be compared against int2 data
|
||||||
|
in queries.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
The <literal>int24_ops</literal>
|
The following query shows all defined operator classes:
|
||||||
operator class is useful for constructing indices on int2 data, and
|
|
||||||
doing comparisons against int4 data in query qualifications.
|
|
||||||
Similarly, <literal>int42_ops</literal>
|
|
||||||
support indices on int4 data that is to be compared against int2 data
|
|
||||||
in queries.
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The following select list returns all ops_names:
|
|
||||||
|
|
||||||
<programlisting>
|
<programlisting>
|
||||||
SELECT am.amname AS acc_name,
|
SELECT am.amname AS acc_name,
|
||||||
@ -328,6 +339,11 @@ SELECT am.amname AS acc_name,
|
|||||||
</refsect2>
|
</refsect2>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Use <xref linkend="sql-dropindex-title" endterm="sql-dropindex-title">
|
||||||
|
to remove an index.
|
||||||
|
</para>
|
||||||
|
|
||||||
<refsect1 id="R1-SQL-CREATEINDEX-2">
|
<refsect1 id="R1-SQL-CREATEINDEX-2">
|
||||||
<title>
|
<title>
|
||||||
Usage
|
Usage
|
||||||
|
Loading…
x
Reference in New Issue
Block a user