För enkla jämställdhetskontroller (=
), ett B-Tree-index på en varchar
eller text
kolumn är enkel och det bästa valet. Det hjälper verkligen prestanda mycket .
Naturligtvis ett B-Tree-index på ett enkelt integer
presterar bättre. Till att börja med, jämföra enkla integer
värdena är lite snabbare. Men ännu viktigare är prestanda också en funktion av indexets storlek. En större kolumn betyder färre rader per datasida, betyder att fler sidor måste läsas ...
Sedan HomeAddress
är knappast unik ändå, det är inte en bra naturlig primärnyckel. Jag rekommenderar starkt att du använder en surrogat primärnyckel istället. En serial
kolumn
är det självklara valet för det. Dess enda syfte är att ha en enkel, snabb primärnyckel att arbeta med.
Om du har andra tabeller som refererar till nämnda tabell blir detta ännu mer effektivt. Istället för att duplicera en lång sträng för kolumnen för främmande nyckel behöver du bara de 4 byten för en heltalskolumn. Och du behöver inte kaskad uppdateringar så mycket, eftersom en adress måste ändras, medan en surrogat-pk kan förbli densamma (men inte måste, naturligtvis).
Din tabell kan se ut så här:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
Detta resulterar i två B-Tree-index. Ett unikt index på resident_id
och ett vanligt index på address
.
Mer om index i manualen
.
Postgres erbjuder många alternativ - men du behöver inte mer för detta enkla fodral.