Ако създадете съставен първичен ключ, на (x, y, z)
, PostgreSQL реализира това с помощта на един UNIQUE
многоколонен btree индекс на (x, y, z)
. Освен това и трите колони са NOT NULL
(имплицитно), което е основната разлика между PRIMARY KEY
и UNIQUE INDEX
.
Освен очевидни ограничения върху вашите данни, индексът с няколко колони също има малко по-различен ефект върху производителността на заявките от три отделни индекса на x
, y
и z
.
Свързана дискусия на dba.SE:
- Работа с индекси в PostgreSQL
С примери, сравнителни показатели, дискусии и поглед върху новата функция на сканирането само за индекси в Postgres 9.2.
По-специално първичен ключ на (x, y, z)
ще ускори заявките с условия на x
, (x,y)
или (x,y,z)
оптимално. Също така ще помогне със заявки за y
, z
, (y,z)
или (x,z)
но в много по-малка степен.
Ако трябва да ускорите заявките за последните комбинации, може да искате да промените реда на колоните във вашето PK ограничение и/или да създадете един или повече допълнителни индекси. Вижте:
- Съставният индекс добър ли е и за заявки в първото поле?