Jeg har valgt lave indexering i vores database, da jeg har tænkt mig at kigge på hvordan man kan optimere den. Jeg har gjort så jeg har over en million biler i databasen, hvilket gør at en sequential scan ikke helt er hurtig nok til det vi ønsker. Vi har en metode der søger efter en specifik bil ud fra dens serialnumber. Jeg har derfor lavet et index for serialnumber i tablet car.
CREATE INDEX car_serialnumber ON car(serialnumber)
Grunden til at vi laver det her index, er fordi at det meget gerne burde blive hurtigere. Vi kan tage et eksempel med en telefonbog. Vi har her alle mulige navne. Tænk så på hvis de ikke var sat i alfabetisk rækkefølge. Det ville tage alt for lang tid at finde det navn du leder efter, det samme er det her med vores database, hvor vi inden indexering, bare ville gå slavisk igennem alle entries i databasen.
Ligesom i en telefonbog, vil vi organisere vores entries i en specifik rækkefølge, for at gøre det nemmere for os selv at finde det specifikke vi leder efter.
PostgreSQL – CREATE INDEX eksempel
En simpel version af CREATE INDEX
statement:
CREATE INDEX index_name ON table_name [USING method]
(
column_name [ASC | DESC] [NULLS {FIRST | LAST }],
...
);
I syntaxen:
- 1. Specificer index navnet efter
CREATE INDEX
delen. Index navnet burde være noget der betyder noget og let at huske. - 2. Specificer navnet på det table som indexed skal være på.
- 3. Specificer den index metode som fx.
btree
,hash
,gist
,spgist
,gin
, ogbrin
. PostgreSQL brugerbtree
som default. - 4, Skriv en eller flere columns der skal være i indexet.
ASC
ogDESC
specificerer sorteringsrækkefølgen. ASC er default.NULLS FIRST
ellerNULLS LAST
specificerer nulls sortering before or after non-nulls.NULLS FIRST
er default nårDESC
er valgt ogNULLS LAST
er default nårDESC
ikke er specificeret.
For at se forskellen på hvor længe det tager med en sequential scan vs en index scan, kan man vælge at anvende explain analyze foran sit query, for at få fortalt hvor længe det tager for databasen at fremskaffe den information man beder om.
No responses yet