2012-07-05 22 views
22

W MySQL, po utworzeniu złożonego klucza podstawowego, na przykład z kolumnami X, Y, Z, wszystkie trzy kolumny automatycznie stają się indeksami. Czy to samo dzieje się z Postgres?Podstawowy klucz złożony PostgreSQL

+2

Masz na myśli, że MySQL tworzy ** trzy * * indeksy *? Brzmi okropnie dziwnie –

Odpowiedz

52

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

Poza oczywistymi ograniczeniami swoich danych, multi-column index posiada również nieco inny wpływ na wydajność zapytań niż trzech indywidualnych indeksów na x, y i z.

Przeprowadziliśmy bardzo szczegółową dyskusję na ten temat niedawno: on dba.SE in this related question. Z przykładami, benchmarkami, dyskusjami i prognozami do nadchodzącej funkcji index-only scans in version 9.2.

W szczególności, klucz podstawowy na (x, y, z) przyspieszy zapytań z warunkami na x, (x,y) lub (x,y,z) optymalnie. Pomoże to również w zapytaniach pod numerami y, z, (y,z) lub (x,z), ale w znacznie mniejszym stopniu.

Jeśli chcesz przyspieszyć kwerendy w tych ostatnich kombinacjach, możesz utworzyć jeden lub więcej dodatkowych indeksów.

2

Yes:

PostgreSQL automatycznie tworzy unikatowy indeks gdy UNIQUE lub klucz podstawowy jest zdefiniowany dla tabeli. Indeks obejmuje kolumny, które składają się z klucza głównego lub ograniczenia unikalnego (indeks wielokolumnowy, jeśli jest to stosowne) i jest mechanizmem egzekwującym ograniczenie.

+1

Myślę, że pytanie brzmiało, czy każda kolumna ma własny indeks. –

+0

Zgadzam się. Pytanie nie dotyczy tego, czy 1 indeks wielokolumnowy jest tworzony automatycznie, ale dobrze, jeśli tworzone są 3 pojedyncze indeksy kolumnowe. Odpowiedź brzmi: nie. Twoja odpowiedź jest nadal istotna, ponieważ dostarcza informacji uzupełniających, oczywiście po ich edycji. W rzeczywistości odpowiedź @ dondi-michael-stroma jest bardziej trafna niż ta, którą wybrał pierwotny wnioskodawca. – Chucky

1

Nie, otrzymujesz jeden indeks dla klucza podstawowego z trzema kolumnami.

Powiązane problemy