Se crei una chiave primaria composita, su (x, y, z)
, PostgreSQL lo implementa con l'aiuto di un UNIQUE
indice btree a più colonne su (x, y, z)
. Inoltre, tutte e tre le colonne sono NOT NULL
(implicitamente), che è la differenza principale tra una PRIMARY KEY
e un UNIQUE INDEX
.
Oltre alle ovvie restrizioni sui tuoi dati, l'indice a più colonne ha anche un effetto leggermente diverso sulle prestazioni delle query rispetto a tre singoli indici su x
, y
e z
.
Discussione correlata su dba.SE:
- Lavorare gli indici in PostgreSQL
Con esempi, benchmark, discussioni e prospettive sulla nuova funzionalità delle scansioni solo indice in Postgres 9.2.
In particolare, una chiave primaria su (x, y, z)
accelererà le query con condizioni su x
, (x,y)
o (x,y,z)
in modo ottimale. Aiuterà anche con le query su y
, z
, (y,z)
o (x,z)
ma in misura molto minore.
Se è necessario velocizzare le query su queste ultime combinazioni, è possibile modificare l'ordine delle colonne nel vincolo PK e/o creare uno o più indici aggiuntivi. Vedi:
- Un indice composito va bene anche per le query sul primo campo?