web2 logo

Artikel Links Notities

CREATE INDEX

Bij het uitvoeren van een query moet de hele tabel worden langsgelopen om alle waarden te vinden die voldoen. Dit proces kan versneld worden door een index te plaatsen op één of meerdere kolommen. Een index is een aparte lijst waar de waarden van één of meerdere kolommen gesorteerd staan. Een index bevat pointers naar de tabel van de kolom(men) waar de index op gebaseerd is en versneld zo het vinden van de juiste waarden. Kolommen die je vaak gebruikt in de WHERE gedeelten van query's zijn de meest logische kandidaten voor indexen. Als naam voor een index wordt meestal de tabelnaam gebruikt, gevolgd door de kolomnaam en aangevuld met idx om aan te geven dat het hier om een index gaat. Voorbeeld in psql: test=# CREATE INDEX personen_achternaam_idx ON personen(achternaam); CREATE INDEX Resultaat: test=# SELECT tablename, indexname, indexdef test-# FROM pg_indexes test-# WHERE schemaname = 'public'; tablename | indexname | indexdef -----------+-------------------------+---------------------------------------------------- personen | personen_achternaam_idx | CREATE INDEX personen_achternaam_idx ON public.personen USING btree (achternaam) (1 row) Deze index op 'achternaam' helpt alleen in een query waar je op achternaam zoekt. Het is mogelijk om een index te maken op meerdere kolommen. Een multikolom index wordt gesorteerd op de eerste kolom. Als in de eerste kolom meerdere dezelfde waarden staan, dan wordt op de tweede kolom gesorteerd. Multikolom indexen zijn alleen nuttig als je veel dezelfde waarden hebt in een kolom. Voorbeeld in psql: test=# CREATE INDEX personen_achternaam_voornaam_idx ON personen(achternaam,voornaam); CREATE INDEX Resultaat: test=# \d personen Table "public.personen" Column | Type | Collation | Nullable | Default ------------+------------------------+-----------+----------+--------- persoonid | integer | | | achternaam | character varying(255) | | | voornaam | character varying(255) | | | adres | character varying(255) | | | stad | character varying(255) | | | Indexes: "personen_achternaam_idx" btree (achternaam) "personen_achternaam_voornaam_idx" btree (achternaam, voornaam) Een index verwijderen kan met de DROP INDEX opdracht.

Unique indexen

Unique indexen zijn indexen die geen dubbele waarden toestaan. Bij multikolom indexen zorgt dit ervoor dat de combinatie van de waarden uniek moet zijn. Als geprobeerd wordt waarden toe te voegen die reeds in die combinatie bestaan, dan volgt een foutmelding. Unique indexen staan wel meerdere NULL waarden toe. Algemeen vorm: CREATE UNIQUE INDEX tabelnaam_kolom1_kolom2_idx ON tabelnaam(kolom1,kolom2)

naar boven

term zoeken

Notitieruimte