Proste sprawdzanie równości (=
), indeks B-Tree na varchar
lub text
kolumna jest prosta i jest najlepszym wyborem. Z pewnością poprawia wydajność bardzo .
Oczywiście indeks B-Tree na prostej integer
działa lepiej. Na początek porównując proste integer
wartości są nieco szybsze. Ale co ważniejsze, wydajność jest również funkcją wielkości indeksu. Większa kolumna oznacza mniej wierszy na stronę danych, co oznacza, że trzeba przeczytać więcej stron ...
Od HomeAddress
i tak nie jest unikalny, nie jest to dobry naturalny klucz podstawowy. Zdecydowanie sugeruję użycie zastępczego klucza podstawowego zamiast. serial
kolumna
to oczywisty wybór. Jego jedynym celem jest posiadanie prostego, szybkiego klucza podstawowego do pracy.
Jeśli masz inne tabele odwołujące się do tej tabeli, staje się to jeszcze bardziej wydajne. Zamiast duplikować długi ciąg dla kolumny klucza obcego, potrzebujesz tylko 4 bajtów dla kolumny liczb całkowitych. I nie musisz tak bardzo kaskadować aktualizacji, ponieważ adres musi się zmienić, podczas gdy zastępczy pk może pozostać taki sam (ale oczywiście nie musi).
Twój stół może wyglądać tak:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
Daje to dwa indeksy B-Tree. Unikalny indeks na resident_id
i zwykły indeks na address
.
Więcej o indeksach w podręczniku
.
Postgres oferuje wiele opcji - ale w tym prostym przypadku nie potrzebujesz ich więcej.