1998-09-07 17:58:31 +02:00
|
|
|
<REFENTRY ID="SQL-CREATEINDEX">
|
1998-05-13 07:34:00 +02:00
|
|
|
<REFMETA>
|
|
|
|
<REFENTRYTITLE>
|
|
|
|
CREATE INDEX
|
|
|
|
</REFENTRYTITLE>
|
|
|
|
<REFMISCINFO>SQL - Language Statements</REFMISCINFO>
|
|
|
|
</REFMETA>
|
|
|
|
<REFNAMEDIV>
|
|
|
|
<REFNAME>
|
|
|
|
CREATE INDEX
|
|
|
|
</REFNAME>
|
|
|
|
<REFPURPOSE>
|
|
|
|
Constructs a secondary index
|
|
|
|
</REFPURPOSE>
|
|
|
|
<REFSYNOPSISDIV>
|
|
|
|
<REFSYNOPSISDIVINFO>
|
1998-09-16 16:43:12 +02:00
|
|
|
<DATE>1998-09-09</DATE>
|
1998-05-13 07:34:00 +02:00
|
|
|
</REFSYNOPSISDIVINFO>
|
|
|
|
<SYNOPSIS>
|
1998-09-16 16:43:12 +02:00
|
|
|
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>] [, ...] )
|
|
|
|
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">column</replaceable> [, ... ]) <replaceable class="parameter">ops_name</replaceable> )
|
1998-05-13 07:34:00 +02:00
|
|
|
</SYNOPSIS>
|
|
|
|
|
|
|
|
<REFSECT2 ID="R2-SQL-CREATEINDEX-1">
|
|
|
|
<REFSECT2INFO>
|
1998-09-16 16:43:12 +02:00
|
|
|
<DATE>1998-09-09</DATE>
|
1998-05-13 07:34:00 +02:00
|
|
|
</REFSECT2INFO>
|
|
|
|
<TITLE>
|
|
|
|
Inputs
|
|
|
|
</TITLE>
|
|
|
|
<PARA>
|
|
|
|
<VARIABLELIST>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
1998-09-16 16:43:12 +02:00
|
|
|
UNIQUE
|
1998-05-13 07:34:00 +02:00
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
1998-09-16 16:43:12 +02:00
|
|
|
Causes the system to check for
|
1998-09-22 17:48:03 +02:00
|
|
|
duplicate values in the table when the index is created (if data
|
1998-05-13 07:34:00 +02:00
|
|
|
already exist) and each time data is added. Attempts to
|
|
|
|
insert or update non-duplicate data will generate an
|
|
|
|
error.
|
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
|
|
|
<replaceable class="parameter">index_name</replaceable>
|
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
The name of the index to be created.
|
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
|
|
|
<replaceable class="parameter">table</replaceable>
|
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
The name of the table to be indexed.
|
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
|
|
|
<replaceable class="parameter">acc_name</replaceable>
|
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
the name of the access method which is to be used for
|
|
|
|
the index. The default access method is BTREE.
|
1998-09-22 17:48:03 +02:00
|
|
|
Postgres provides three access methods for secondary indexes:
|
1998-05-13 07:34:00 +02:00
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term>BTREE</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
an implementation of the Lehman-Yao
|
|
|
|
high-concurrency btrees.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>RTREE</term>
|
|
|
|
<listitem>
|
|
|
|
<para>implements standard rtrees using Guttman's
|
|
|
|
quadratic split algorithm.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term>HASH</term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
an implementation of Litwin's linear hashing.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
</variablelist>
|
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
|
|
|
<replaceable class="parameter">column</replaceable>
|
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
The name of a column of the table.
|
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
|
|
|
<replaceable class="parameter">ops_name</replaceable>
|
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
An associated operator class.
|
|
|
|
The following select list returns all ops_names:
|
|
|
|
|
1998-09-16 16:43:12 +02:00
|
|
|
<programlisting>
|
|
|
|
SELECT am.amname AS acc_name,
|
|
|
|
opc.opcname AS ops_name,
|
|
|
|
opr.oprname AS ops_comp
|
|
|
|
FROM pg_am am, pg_amop amop,
|
|
|
|
pg_opclass opc, pg_operator opr
|
|
|
|
WHERE amop.amopid = am.oid AND
|
|
|
|
amop.amopclaid = opc.oid AND
|
|
|
|
amop.amopopr = opr.oid
|
|
|
|
ORDER BY acc_name, ops_name, ops_comp
|
|
|
|
</programlisting>
|
|
|
|
|
1998-05-13 07:34:00 +02:00
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
|
|
|
<replaceable class="parameter">func_name</replaceable>
|
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
A user-defined function, which returns a value that can
|
|
|
|
be indexed.
|
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
</variablelist>
|
1998-09-16 16:43:12 +02:00
|
|
|
|
1998-05-13 07:34:00 +02:00
|
|
|
</REFSECT2>
|
|
|
|
|
|
|
|
<REFSECT2 ID="R2-SQL-CREATEINDEX-2">
|
|
|
|
<REFSECT2INFO>
|
1998-09-16 16:43:12 +02:00
|
|
|
<DATE>1998-09-09</DATE>
|
1998-05-13 07:34:00 +02:00
|
|
|
</REFSECT2INFO>
|
|
|
|
<TITLE>
|
|
|
|
Outputs
|
|
|
|
</TITLE>
|
|
|
|
<PARA>
|
|
|
|
</PARA>
|
|
|
|
<VARIABLELIST>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
1998-09-16 16:43:12 +02:00
|
|
|
<replaceable>status</replaceable>
|
1998-05-13 07:34:00 +02:00
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
<VARIABLELIST>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
|
|
|
<ReturnValue>CREATE</ReturnValue>
|
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
The message returned if the index is successfully created.
|
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
<VARLISTENTRY>
|
|
|
|
<TERM>
|
|
|
|
<ReturnValue>ERROR: Cannot create index: 'index_name' already exists.</ReturnValue>
|
|
|
|
</TERM>
|
|
|
|
<LISTITEM>
|
|
|
|
<PARA>
|
|
|
|
This error occurs if it is impossible to create the index.
|
|
|
|
</PARA>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
</variablelist>
|
|
|
|
</LISTITEM>
|
|
|
|
</VARLISTENTRY>
|
|
|
|
</VARIABLELIST>
|
|
|
|
</REFSECT2>
|
|
|
|
</REFSYNOPSISDIV>
|
|
|
|
|
|
|
|
<REFSECT1 ID="R1-SQL-CREATEINDEX-1">
|
|
|
|
<REFSECT1INFO>
|
1998-09-16 16:43:12 +02:00
|
|
|
<DATE>1998-09-09</DATE>
|
1998-05-13 07:34:00 +02:00
|
|
|
</REFSECT1INFO>
|
|
|
|
<TITLE>
|
|
|
|
Description
|
|
|
|
</TITLE>
|
|
|
|
<PARA>
|
1998-09-22 17:48:03 +02:00
|
|
|
<command>CREATE INDEX</command> constructs an index
|
1998-09-16 16:43:12 +02:00
|
|
|
<replaceable class="parameter">index_name</replaceable>.
|
|
|
|
on the specified
|
|
|
|
<replaceable class="parameter">table</replaceable>.
|
|
|
|
|
|
|
|
<tip>
|
|
|
|
<para>
|
1998-09-22 17:48:03 +02:00
|
|
|
Indexes are primarily used to enhance database performance.
|
1998-09-16 16:43:12 +02:00
|
|
|
But inappropriate use will result in slower performance.
|
|
|
|
</tip>
|
|
|
|
|
1998-05-13 07:34:00 +02:00
|
|
|
<para>
|
|
|
|
In the first syntax shown above, the key fields for the
|
|
|
|
index are specified as column names; a column may also have
|
|
|
|
an associated operator class. An operator class is used
|
|
|
|
to specify the operators to be used for a particular
|
|
|
|
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>
|
|
|
|
In the second syntax, an index is defined
|
|
|
|
on the result of a user-defined function
|
|
|
|
<replaceable class="parameter">func_name</replaceable> applied
|
|
|
|
to one or more attributes of a single class. These functional
|
1998-09-22 17:48:03 +02:00
|
|
|
indexes can be used to obtain fast access to data
|
1998-05-13 07:34:00 +02:00
|
|
|
based on operators that would normally require some
|
|
|
|
transformation to apply them to the base data.
|
|
|
|
</para>
|
|
|
|
|
|
|
|
<REFSECT2 ID="R2-SQL-CREATEINDEX-3">
|
|
|
|
<REFSECT2INFO>
|
1998-09-16 16:43:12 +02:00
|
|
|
<DATE>1998-09-09</DATE>
|
1998-05-13 07:34:00 +02:00
|
|
|
</REFSECT2INFO>
|
|
|
|
<TITLE>
|
|
|
|
Notes
|
|
|
|
</TITLE>
|
|
|
|
<PARA>
|
|
|
|
Currently, only the BTREE access method supports multi-column
|
1998-09-22 17:48:03 +02:00
|
|
|
indexes. Up to 7 keys may be specified.
|
1998-05-13 07:34:00 +02:00
|
|
|
</PARA>
|
|
|
|
<para>
|
1998-09-16 16:43:12 +02:00
|
|
|
Use <command>DROP INDEX</command>
|
|
|
|
to remove an index.
|
1998-05-13 07:34:00 +02:00
|
|
|
</para>
|
|
|
|
</REFSECT2>
|
|
|
|
|
|
|
|
<REFSECT1 ID="R1-SQL-CREATEINDEX-2">
|
|
|
|
<TITLE>
|
|
|
|
Usage
|
|
|
|
</TITLE>
|
|
|
|
<PARA>To create a btree index on the field <literal>title</literal>
|
|
|
|
in the table <literal>films</literal>:
|
|
|
|
</PARA>
|
|
|
|
<ProgramListing>
|
1998-09-16 16:43:12 +02:00
|
|
|
CREATE UNIQUE INDEX title_idx
|
|
|
|
ON films (title);
|
1998-05-13 07:34:00 +02:00
|
|
|
</ProgramListing>
|
1998-09-16 16:43:12 +02:00
|
|
|
|
|
|
|
<!--
|
|
|
|
<comment>
|
|
|
|
Is this example correct?
|
|
|
|
</comment>
|
1998-05-13 07:34:00 +02:00
|
|
|
<para>
|
|
|
|
To create a rtree index on a point attribute so that we
|
|
|
|
can efficiently use box operators on the result of the
|
|
|
|
conversion function:
|
|
|
|
</para>
|
|
|
|
<programlisting>
|
1998-09-16 16:43:12 +02:00
|
|
|
CREATE INDEX pointloc
|
|
|
|
ON points USING RTREE (point2box(location) box_ops);
|
|
|
|
SELECT * FROM points
|
|
|
|
WHERE point2box(points.pointloc) = boxes.box;
|
1998-05-13 07:34:00 +02:00
|
|
|
</programlisting>
|
1998-09-16 16:43:12 +02:00
|
|
|
-->
|
|
|
|
|
1998-05-13 07:34:00 +02:00
|
|
|
</REFSECT1>
|
|
|
|
|
|
|
|
<REFSECT1 ID="R1-SQL-CREATEINDEX-3">
|
|
|
|
<TITLE>
|
|
|
|
Compatibility
|
|
|
|
</TITLE>
|
|
|
|
<PARA>
|
|
|
|
</PARA>
|
|
|
|
|
|
|
|
<REFSECT2 ID="R2-SQL-CREATEINDEX-4">
|
|
|
|
<REFSECT2INFO>
|
1998-09-16 16:43:12 +02:00
|
|
|
<DATE>1998-09-09</DATE>
|
1998-05-13 07:34:00 +02:00
|
|
|
</REFSECT2INFO>
|
|
|
|
<TITLE>
|
|
|
|
SQL92
|
|
|
|
</TITLE>
|
|
|
|
<PARA>
|
1998-09-16 16:43:12 +02:00
|
|
|
CREATE INDEX is a <productname>Postgres</productname> language extension.
|
1998-05-13 07:34:00 +02:00
|
|
|
</PARA>
|
|
|
|
<para>
|
1998-09-16 16:43:12 +02:00
|
|
|
There is no <command>CREATE INDEX</command> command in SQL92.
|
1998-05-13 07:34:00 +02:00
|
|
|
</para>
|
|
|
|
</refsect2>
|
|
|
|
</refsect1>
|
|
|
|
</REFENTRY>
|
|
|
|
|
|
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
Local variables:
|
|
|
|
mode: sgml
|
|
|
|
sgml-omittag:t
|
|
|
|
sgml-shorttag:t
|
|
|
|
sgml-minimize-attributes:nil
|
|
|
|
sgml-always-quote-attributes:t
|
|
|
|
sgml-indent-step:1
|
|
|
|
sgml-indent-data:t
|
|
|
|
sgml-parent-document:nil
|
|
|
|
sgml-default-dtd-file:"../reference.ced"
|
|
|
|
sgml-exposed-tags:nil
|
|
|
|
sgml-local-catalogs:"/usr/lib/sgml/catalog"
|
|
|
|
sgml-local-ecat-files:nil
|
|
|
|
End:
|
|
|
|
-->
|