PostgreSQL composite primary key

W MySQL, kiedy tworzę złożony klucz podstawowy, powiedzmy z kolumnami X, Y, Z, wtedy wszystkie trzy kolumny automatycznie stają się indeksami. Czy to samo dzieje się w przypadku Postgres?

Author: Erwin Brandstetter, 2012-07-06

3 answers

Jeśli utworzysz złożony klucz podstawowy na (x, y, z), PostgreSQL zaimplementuje to za pomocą jednego UNIQUE wielokolumnowego indeksu btree na (x, y, z). Ponadto wszystkie trzy kolumny muszą być NOT NULL, co jest główną różnicą między PRIMARY KEY a UNIQUE INDEX.

Oprócz oczywistych ograniczeń dotyczących Danych, multi-column index ma również nieco inny wpływ na wydajność zapytań niż trzy pojedyncze indeksy na x, y i z.

We miałem bardzo gruntowną dyskusję na ten temat ostatnio na dba.SE w tym pytaniu. Z przykładami, benchmarkami, dyskusjami i perspektywami do nadchodzącej funkcji skanowanie tylko indeksów w wersji 9.2.

W szczególności klucz główny na (x, y, z) przyspieszy zapytania z warunkami na x, (x,y) lub (x,y,z) optymalnie. Pomoże również w zapytaniach na y, z, (y,z) lub (x,z), ale w znacznie mniejszym stopniu.

Jeśli chcesz przyspieszyć zapytania w przypadku tych ostatnich kombinacji możesz zmienić kolejność kolumn w ograniczeniu PK lub utworzyć jeden lub więcej dodatkowych indeksów.

 58
Author: Erwin Brandstetter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 09:52:49

Tak :

PostgreSQL automatycznie tworzy unikalny indeks, gdy dla tabeli zdefiniowano unikalne ograniczenie lub klucz podstawowy. Indeks obejmuje kolumny składające się na klucz główny lub unikalne ograniczenie (indeks wielokolumnowy, jeśli jest to właściwe) i jest mechanizmem wymuszającym to ograniczenie.

 2
Author: Milen A. Radev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-05 20:42:48

Nie, dostajesz jeden indeks dla trzy-kolumnowego klucza podstawowego.

 1
Author: Dondi Michael Stroma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-05 20:54:43