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?