PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

postgresql-Index für die Zeichenfolgenspalte

Für einfache Gleichheitsprüfungen (= ), ein B-Tree-Index auf einem varchar oder text Spalte ist einfach und die beste Wahl. Es hilft sicherlich sehr der Leistung .

Natürlich ein B-Tree-Index auf einer einfachen integer schneidet besser ab. Für den Anfang vergleichen Sie einfach integer Werte geht etwas schneller. Aber was noch wichtiger ist, die Performance ist auch eine Funktion der Größe des Index. Eine größere Spalte bedeutet weniger Zeilen pro Datenseite, bedeutet, dass mehr Seiten gelesen werden müssen ...

Da die HomeAddress sowieso kaum eindeutig ist, ist es kein guter natürlicher Primärschlüssel. Ich würde dringend empfehlen, einen Ersatz-Primärschlüssel zu verwenden stattdessen. Eine serial Spalte ist die offensichtliche Wahl dafür. Sein einziger Zweck besteht darin, einen einfachen, schnellen Primärschlüssel zu haben, mit dem man arbeiten kann.

Wenn Sie andere Tabellen haben, die auf diese Tabelle verweisen, wird dies noch effizienter. Anstatt eine lange Zeichenfolge für die Fremdschlüsselspalte zu duplizieren, benötigen Sie nur die 4 Bytes für eine Ganzzahlspalte. Und Sie müssen Updates nicht so oft kaskadieren, da sich eine Adresse ändern muss, während ein Ersatz-PK gleich bleiben kann (aber natürlich nicht muss).

Ihre Tabelle könnte so aussehen:

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

CREATE INDEX resident_adr_idx ON resident(address);

Dies führt zu zwei B-Tree-Indizes. Ein eindeutiger Index für resident_id und ein einfacher Index auf address .

Mehr über Indizes im Handbuch .
Postgres bietet viele Möglichkeiten - aber mehr braucht man für diesen einfachen Fall nicht.