PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

indice postgresql sulla colonna della stringa

Per semplici controlli di uguaglianza (= ), un indice B-Tree su un varchar o text colonna è semplice e la scelta migliore. Sicuramente aiuta le prestazioni molto .

Naturalmente, un indice B-Tree su un semplice integer si comporta meglio. Per cominciare, confrontando il semplice integer valori è un po' più veloce. Ma soprattutto, la performance è anche una funzione della dimensione dell'indice. Una colonna più grande significa meno righe per pagina di dati, significa che è necessario leggere più pagine ...

Dal momento che il HomeAddress non è comunque univoco, non è una buona chiave primaria naturale. Consiglio vivamente di utilizzare una chiave primaria surrogata invece. Un serial colonna è la scelta più ovvia per questo. Il suo unico scopo è avere una chiave primaria semplice e veloce con cui lavorare.

Se hai altre tabelle che fanno riferimento a detta tabella, questo diventa ancora più efficiente. Invece di duplicare una lunga stringa per la colonna della chiave esterna, sono necessari solo i 4 byte per una colonna intera. E non è necessario aggiungere così tanto aggiornamenti a cascata, dal momento che un indirizzo è destinato a cambiare, mentre un pk surrogato può rimanere lo stesso (ma non è necessario, ovviamente).

La tua tabella potrebbe assomigliare a questa:

CREATE TABLE resident (
   resident_id serial PRIMARY KEY
  ,address text NOT NULL
   -- more columns
);

CREATE INDEX resident_adr_idx ON resident(address);

Ciò si traduce in due indici B-Tree. Un indice univoco su resident_id e un semplice indice su address .

Ulteriori informazioni sugli indici nel manuale .
Postgres offre molte opzioni, ma non te ne servono altre per questo semplice caso.