PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres i indeksy dotyczące kluczy obcych i kluczy podstawowych

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:serial a tożsamość

  2. Jak zainstalować pakiet Pythona na Linuksie, aby został znaleziony przez działające już rozszerzenie plpython3u PostgreSQL 13?

  3. Jak datuje się matematykę, która ignoruje rok?

  4. Jak działa pg_sleep() w PostgreSQL

  5. Nazwa tabeli jako parametr funkcji PostgreSQL