Nach dieser kurzen Einführung wollen wir uns ansehen, wie Indices definiert werden können:
test=# \h CREATE INDEX
Command: CREATE INDEX
Description: define a new index
Syntax:
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] name ON table [ USING method ]
( { column | ( expression ) } [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
[ WITH ( storage_parameter = value [, ... ] ) ]
[ TABLESPACE tablespace ]
[ WHERE predicate ]
Die Syntax von CREATE INDEX ist nicht sonderlich komplex. Die Grundstruktur unterscheidet sich nicht wesentlich von der Syntax, die beispielsweise von Oracle zur Verfügung gestellt wird. Der wesentlichste Unterschied ist, dass Sie in PostgreSQL aufgrund des komplett unterschiedlichen Storage Systemes keine großen Auswahlmöglichkeiten im Zusammenhang mit Tablespaces und dergleichen haben. Da es in PostgreSQL nicht notwendig ist, Extends und dergleichen zu erzeugen, sind diese Syntaxelemente klarerweise auch nicht vorhanden.
Versuchen wir also die Spalte gid in der Tabelle t_passwd zu indizieren:
test=# CREATE INDEX idx_passwd_gid ON t_passwd (gid); CREATE INDEX
Wenn wir nun die Datenstruktur ansehen, wird PostgreSQL den Index im Listing zeigen:
test=# \d t_passwd
Table "public.t_passwd"
Column | Type | Modifiers
-----------+---------+-----------
account | text |
passwd | text |
uid | integer |
gid | integer |
gecos | text |
directory | text |
shell | text |
Indexes:
"idx_passwd_gid" btree (gid)
Wenn Sie einen größeren Index anlegen, müssen Sie sich bewusst sein, dass der Datenbestand vom System sortiert wird. Das bedeutet, dass Sie bei großen Tabellen sehr viel Platz benötigen, um die für die Sortierung notwendigen temporären Tabellen auf die Festplatte zu schreiben.