За прости проверки за равенство (=
), индекс на B-дърво на varchar
или text
колоната е проста и най-добрият избор. Със сигурност много помага за производителността .
Разбира се, B-Tree индекс на просто integer
се представя по-добре. Като за начало, сравняване на просто integer
стойности е малко по-бързо. Но по-важното е, че производителността също зависи от размера на индекса. По-голямата колона означава по-малко редове на страница с данни, означава, че повече страници трябва да бъдат прочетени...
Тъй като HomeAddress
така или иначе едва ли е уникален, не е добър естествен първичен ключ. Горещо препоръчвам да използвате сурогатен първичен ключ вместо. serial
колона
е очевидният избор за това. Единствената му цел е да има прост, бърз първичен ключ за работа.
Ако имате други таблици, препращащи към споменатата таблица, това става още по-ефективно. Вместо да дублирате дълъг низ за колоната с външен ключ, имате нужда само от 4 байта за колона с цели числа. И не е нужно да каскадно обновявате толкова много, тъй като адресът е длъжен да се промени, докато сурогатният pk може да остане същият (но не е задължително, разбира се).
Вашата таблица може да изглежда така:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
Това води до два индекса на B-Tree. Уникален индекс на resident_id
и обикновен индекс на address
.
Повече за индексите в ръководството
.
Postgres предлага много опции - но нямате нужда от повече за този прост случай.