Jeśli utworzysz złożony klucz podstawowy, na (x, y, z)
, PostgreSQL implementuje to za pomocą jednego UNIQUE
wielokolumnowy indeks btree na (x, y, z)
. Ponadto wszystkie trzy kolumny są NOT NULL
(domyślnie), co jest główną różnicą między PRIMARY KEY
i UNIQUE INDEX
.
Oprócz oczywistych ograniczeń dotyczących danych, indeks wielokolumnowy ma również nieco inny wpływ na wydajność zapytań niż trzy indywidualne indeksy na x
, y
i z
.
Powiązana dyskusja na dba.SE:
- Praca z indeksami w PostgreSQL
Z przykładami, testami porównawczymi, dyskusją i perspektywą nowej funkcji skanowania tylko z indeksowaniem w Postgresie 9.2.
W szczególności klucz podstawowy w (x, y, z)
przyspieszy zapytania z warunkami na x
, (x,y)
lub (x,y,z)
optymalnie. Pomoże również w zapytaniach dotyczących y
, z
, (y,z)
lub (x,z)
ale w znacznie mniejszym stopniu.
Jeśli chcesz przyspieszyć zapytania dotyczące tych ostatnich kombinacji, możesz zmienić kolejność kolumn w ograniczeniu PK i/lub utworzyć jeden lub więcej dodatkowych indeksów. Zobacz:
- Czy indeks złożony jest również odpowiedni dla zapytań w pierwszym polu?