Se você criar uma chave primária composta, em
(x, y, z)
, o PostgreSQL implementa isso com a ajuda de um UNIQUE
índice btree de várias colunas em (x, y, z)
. Além disso, todas as três colunas são NOT NULL
(implicitamente), que é a principal diferença entre uma PRIMARY KEY
e um UNIQUE INDEX
. Além das restrições óbvias em seus dados, o índice de várias colunas também tem um efeito um pouco diferente no desempenho das consultas do que três índices individuais em
x
, y
e z
. Discussão relacionada em dba.SE:
- Trabalho de índices no PostgreSQL
Com exemplos, benchmarks, discussões e perspectivas sobre o novo recurso de varreduras somente de índice no Postgres 9.2.
Em particular, uma chave primária em
(x, y, z)
irá acelerar as consultas com condições em x
, (x,y)
ou (x,y,z)
Otimamente. Também ajudará com consultas em y
, z
, (y,z)
ou (x,z)
mas em muito menor grau. Se você precisar acelerar as consultas nas últimas combinações, poderá alterar a ordem das colunas em sua restrição PK e/ou criar um ou mais índices adicionais. Ver:
- Um índice composto também é bom para consultas no primeiro campo?