sql >> Databasteknik >  >> RDS >> PostgreSQL

postgresql-index på strängkolumn

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.



  1. Kan PostGIS användas för att skapa en rutnätskarta över ett land?

  2. Hur returnerar jag json från Play Scala-kontroller?

  3. migrering från postgres till mysql orsakar konstiga fel Mysql2::Fel:MySQL-servern har försvunnit

  4. hur man får array_agg() att fungera som group_concat() från mySQL