sql >> Database >  >> RDS >> PostgreSQL

postgresql-index op tekenreekskolom

Voor eenvoudige gelijkheidscontroles (= ), een B-Tree index op een varchar of text kolom is eenvoudig en de beste keuze. Het helpt de prestaties zeker veel .

Natuurlijk een B-Tree-index op een eenvoudig integer presteert beter. Om te beginnen, het vergelijken van eenvoudige integer waarden is een beetje sneller. Maar wat nog belangrijker is, de prestaties zijn ook een functie van de grootte van de index. Een grotere kolom betekent minder rijen per gegevenspagina, betekent dat er meer pagina's moeten worden gelezen ...

Sinds het HomeAddress is sowieso nauwelijks uniek, het is geen goede natuurlijke primaire sleutel. Ik zou sterk aanraden om een ​​surrogaat primaire sleutel te gebruiken in plaats van. Een serial kolom is daarvoor de voor de hand liggende keuze. Het enige doel is om een ​​eenvoudige, snelle primaire sleutel te hebben om mee te werken.

Als u andere tabellen heeft die naar die tabel verwijzen, wordt dit nog efficiënter. In plaats van een lange string te dupliceren voor de refererende sleutelkolom, heb je alleen de 4 bytes nodig voor een integerkolom. En je hoeft niet zo veel updates te cascaderen, aangezien een adres onvermijdelijk verandert, terwijl een surrogaat-pk hetzelfde kan blijven (maar dat hoeft natuurlijk niet).

Uw tabel kan er als volgt uitzien:

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

CREATE INDEX resident_adr_idx ON resident(address);

Dit resulteert in twee B-Tree indexen. Een unieke index op resident_id en een duidelijke index op address .

Meer over indexen in de handleiding .
Postgres biedt veel opties - maar meer heb je niet nodig voor dit eenvoudige geval.



  1. MariaDB SQL-setoperators

  2. Wat is het ideale gegevenstype om te gebruiken bij het opslaan van breedtegraad / lengtegraad in een MySQL-database?

  3. hoe stuur e-mail door Pl/sql

  4. Snellere hash met minder botsingen?