Commit 48322916 authored by Tom Lane's avatar Tom Lane

Explain automatic creation (or lack of it) of indexes for the various types

of constraints.

Kevin Grittner
parent 16567b05
<!-- $PostgreSQL: pgsql/doc/src/sgml/ddl.sgml,v 1.96 2010/08/23 02:43:25 tgl Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/ddl.sgml,v 1.97 2010/08/26 21:08:35 tgl Exp $ -->
<chapter id="ddl"> <chapter id="ddl">
<title>Data Definition</title> <title>Data Definition</title>
...@@ -544,6 +544,11 @@ CREATE TABLE products ( ...@@ -544,6 +544,11 @@ CREATE TABLE products (
</programlisting> </programlisting>
</para> </para>
<para>
Adding a unique constraint will automatically create a unique btree
index on the column or group of columns used in the constraint.
</para>
<indexterm> <indexterm>
<primary>null value</primary> <primary>null value</primary>
<secondary sortas="unique constraints">with unique constraints</secondary> <secondary sortas="unique constraints">with unique constraints</secondary>
...@@ -622,6 +627,11 @@ CREATE TABLE example ( ...@@ -622,6 +627,11 @@ CREATE TABLE example (
uniquely. uniquely.
</para> </para>
<para>
Adding a primary key will automatically create a unique btree index
on the column or group of columns used in the primary key.
</para>
<para> <para>
A table can have at most one primary key. (There can be any number A table can have at most one primary key. (There can be any number
of unique and not-null constraints, which are functionally the same of unique and not-null constraints, which are functionally the same
...@@ -831,6 +841,16 @@ CREATE TABLE order_items ( ...@@ -831,6 +841,16 @@ CREATE TABLE order_items (
column is changed (updated). The possible actions are the same. column is changed (updated). The possible actions are the same.
</para> </para>
<para>
Since a <command>DELETE</command> of a row from the referenced table
or an <command>UPDATE</command> of a referenced column will require
a scan of the referencing table for rows matching the old value, it
is often a good idea to index the referencing columns. Because this
is not always needed, and there are many choices available on how
to index, declaration of a foreign key constraint does not
automatically create an index on the referencing columns.
</para>
<para> <para>
More information about updating and deleting data is in <xref More information about updating and deleting data is in <xref
linkend="dml">. linkend="dml">.
...@@ -875,6 +895,11 @@ CREATE TABLE circles ( ...@@ -875,6 +895,11 @@ CREATE TABLE circles (
See also <link linkend="SQL-CREATETABLE-EXCLUDE"><command>CREATE See also <link linkend="SQL-CREATETABLE-EXCLUDE"><command>CREATE
TABLE ... CONSTRAINT ... EXCLUDE</></link> for details. TABLE ... CONSTRAINT ... EXCLUDE</></link> for details.
</para> </para>
<para>
Adding an exclusion constraint will automatically create an index
of the type specified in the constraint declaration.
</para>
</sect2> </sect2>
</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