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

postgresql indeks på streng kolonne

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.



  1. Hvordan kan jeg konvertere split-funktion til inline-tabel med værdi udf i SQL-server?

  2. Kan en attribut angive en tabel frem for en anden?

  3. Er der en måde at eksekvere kode dynamisk i MySQL, svarende til at eksekvere med det samme i Oracle?

  4. Hvordan får jeg mit glemte MySQL-adgangskode fra MySQL Workbench på macOS?