Doc: add a bit to indices.sgml about what is an indexable clause.

We didn't explain this clearly until somewhere deep in the
"Extending SQL" chapter, but really it ought to be mentioned
in the introductory material too.

Discussion: https://postgr.es/m/4097442.1694967650@sss.pgh.pa.us
This commit is contained in:
Tom Lane 2023-12-17 16:49:44 -05:00
parent 7a99fb6e13
commit afc987e196
1 changed files with 34 additions and 1 deletions

View File

@ -90,6 +90,39 @@ CREATE INDEX test1_id_index ON test1 (id);
also significantly speed up queries with joins.
</para>
<para>
In general, <productname>PostgreSQL</productname> indexes can be used
to optimize queries that contain one or more <literal>WHERE</literal>
or <literal>JOIN</literal> clauses of the form
<synopsis>
<replaceable>indexed-column</replaceable> <replaceable>indexable-operator</replaceable> <replaceable>comparison-value</replaceable>
</synopsis>
Here, the <replaceable>indexed-column</replaceable> is whatever
column or expression the index has been defined on.
The <replaceable>indexable-operator</replaceable> is an operator that
is a member of the index's <firstterm>operator class</firstterm> for
the indexed column. (More details about that appear below.)
And the <replaceable>comparison-value</replaceable> can be any
expression that is not volatile and does not reference the index's
table.
</para>
<para>
In some cases the query planner can extract an indexable clause of
this form from another SQL construct. A simple example is that if
the original clause was
<synopsis>
<replaceable>comparison-value</replaceable> <replaceable>operator</replaceable> <replaceable>indexed-column</replaceable>
</synopsis>
then it can be flipped around into indexable form if the
original <replaceable>operator</replaceable> has a commutator
operator that is a member of the index's operator class.
</para>
<para>
Creating an index on a large table can take a long time. By default,
<productname>PostgreSQL</productname> allows reads (<command>SELECT</command> statements) to occur
@ -120,7 +153,7 @@ CREATE INDEX test1_id_index ON test1 (id);
B-tree, Hash, GiST, SP-GiST, GIN, BRIN, and the extension <link
linkend="bloom">bloom</link>.
Each index type uses a different
algorithm that is best suited to different types of queries.
algorithm that is best suited to different types of indexable clauses.
By default, the <link linkend="sql-createindex"><command>CREATE
INDEX</command></link> command creates
B-tree indexes, which fit the most common situations.