Para verificações de igualdade simples (
=
), um índice B-Tree em um varchar
ou text
coluna é simples e a melhor escolha. Certamente ajuda o desempenho muito . Claro, um índice B-Tree em um simples
integer
executa melhor. Para iniciantes, comparando integer
simples valores é um pouco mais rápido. Mas, mais importante, o desempenho também é uma função do tamanho do índice. Uma coluna maior significa menos linhas por página de dados, significa que mais páginas precisam ser lidas... Como o
HomeAddress
dificilmente é único, não é uma boa chave primária natural. Eu sugiro fortemente usar uma chave primária substituta em vez de. Um serial
coluna
é a escolha óbvia para isso. Seu único propósito é ter uma chave primária simples e rápida para trabalhar. Se você tiver outras tabelas referenciando essa tabela, isso se tornará ainda mais eficiente. Em vez de duplicar uma string longa para a coluna de chave estrangeira, você só precisa dos 4 bytes para uma coluna de inteiro. E você não precisa fazer tantas atualizações em cascata, já que um endereço é obrigado a mudar, enquanto um pk substituto pode permanecer o mesmo (mas não precisa, é claro).
Sua tabela pode ficar assim:
CREATE TABLE resident (
resident_id serial PRIMARY KEY
,address text NOT NULL
-- more columns
);
CREATE INDEX resident_adr_idx ON resident(address);
Isso resulta em dois índices B-Tree. Um índice exclusivo em
resident_id
e um índice simples em address
. Mais sobre índices no manual .
O Postgres oferece muitas opções - mas você não precisa de mais para este caso simples.