Til simple lighedstjek (=
), et B-Tree-indeks på en varchar
eller text
kolonnen er enkel og det bedste valg. Det hjælper bestemt ydeevne meget .
Selvfølgelig et B-Tree indeks på et simpelt integer
præsterer bedre. Til at begynde med, sammenligne simple integer
værdierne er lidt hurtigere. Men endnu vigtigere er præstation også en funktion af indeksets størrelse. En større kolonne betyder færre rækker pr. dataside, betyder, at flere sider skal læses ...
Siden HomeAddress
er næppe unik alligevel, det er ikke en god naturlig primær nøgle. Jeg vil kraftigt anbefale at bruge en surrogat primær nøgle i stedet. En serial
kolonne
er det oplagte valg til det. Dens eneste formål er at have en enkel, hurtig primærnøgle at arbejde med.
Hvis du har andre tabeller, der refererer til nævnte tabel, bliver dette endnu mere effektivt. I stedet for at duplikere en lang streng for kolonnen med fremmednøgle, behøver du kun de 4 bytes til en heltalskolonne. Og du behøver ikke at kaskade opdateringer så meget, da en adresse er bundet til at ændre sig, mens en surrogat-pk kan forblive den samme (men behøver selvfølgelig ikke).
Din tabel kunne se sådan ud:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
Dette resulterer i to B-Tree indekser. Et unikt indeks på resident_id
og et almindeligt indeks på address
.
Mere om indekser i manualen
.
Postgres tilbyder mange muligheder - men du behøver ikke mere til denne simple sag.