PostgreSQL automatycznie tworzy indeksy na kluczach podstawowych i ograniczeniach unikalnych, ale nie po stronie odniesienia relacji kluczy obcych.
Kiedy Pg tworzy niejawny indeks, wyemituje NOTICE
wiadomość na poziomie, którą możesz zobaczyć w psql
i/lub dzienniki systemowe, dzięki czemu możesz zobaczyć, kiedy to się stanie. Automatycznie tworzone indeksy są widoczne w \d
dane wyjściowe również dla tabeli.
Dokumentacja dotycząca unikalnych indeksów mówi:
PostgreSQL automatycznie tworzy indeks dla każdego ograniczenia unikalnego i ograniczenia klucza podstawowego, aby wymusić unikalność. Dlatego nie jest konieczne tworzenie indeksu jawnie dla kolumn klucza głównego.
a dokumentacja dotycząca ograniczeń mówi:
Ponieważ DELETE wiersza z tabeli odniesienia lub UPDATE kolumny, do której się odnosi, będzie wymagało przeskanowania wierszy tabeli odniesienia pasujących do starej wartości, często dobrym pomysłem jest indeksowanie kolumn odniesienia. Ponieważ nie zawsze jest to potrzebne, a istnieje wiele możliwości wyboru sposobu indeksowania, deklaracja ograniczenia klucza obcego nie tworzy automatycznie indeksu w kolumnach odniesienia.
Dlatego musisz samodzielnie tworzyć indeksy z kluczami obcymi, jeśli chcesz.
Zauważ, że jeśli używasz podstawowych kluczy obcych, takich jak 2 FK jako PK w tabeli M-to-N, będziesz miał indeks na PK i prawdopodobnie nie będziesz musiał tworzyć żadnych dodatkowych indeksów.
Chociaż zwykle dobrym pomysłem jest utworzenie indeksu (lub uwzględnienie) kolumn kluczy obcych po stronie odwołań, nie jest to wymagane. Każdy dodany indeks spowalnia nieco operacje DML, więc płacisz koszt wydajności przy każdym INSERT
, UPDATE
lub DELETE
. Jeśli indeks jest rzadko używany, może nie być wart posiadania.