Databashantering‎ > ‎

Lektion 2 (databashantering med MySQL)

Av: Marcus Rejås <marcus@rejas.se>
I detta dokument ges en kort introduktion till de begreppen nyckel och index

Nyckel

Begreppet nyckel används om ganska mycket inom databashantering. Det kan till exempel vara
en söknyckel eller en sorteringsnyckel. Det kan även vara ett fält som är en nyckel i en tabell.
I det senare fallet är en nyckel något som kan identifiera en post. Man brukar i alla tabeller ha
något som kallas en primärnyckel som används för att koppla tabellen till en annan tabell.
Primärnyckeln är oftast ett fält som unikt identifierar en post, men det kan även vara
kombinationer av fält även om det är ovanligt. Har man inget fält som passar bra som
primärnyckel så kan man skapa ett separat fält för detta. Inte sällan kallar man det fältet för id.

Obs!

Det kan vara frestande att använda till exempel personnummer som
primärnyckel när man skall göra en databas över personer.
Det är olämpligt eftersom personnumret är väldigt personligt och vissa vill kanske inte lämna ut det.
Det är inte heller i alla länder som det finns personnummer.
Det är på grund av detta som man i det flesta fall i stället använder till exempel medlemsnummer, anställningsnummer, kundnummer eller något annat som unikt identifierar en person.

Index

Ofta vill man söka på vissa saker i sin databas. Vet man i förväg att man ofta kommer att söka
efter något speciellt kan det vara bra att förbereda sin databas på detta. Det kan man göra
genom att indexera ett eller flera fält. När du lägger till en post i din databas kommer den att
hamna sist i tabellen. Om du ändrar den kommer den att ligga kvar.

I vilken ordning saker och ting ligger i databasen kan man egentligen inte
säga något om, det sköter databashanteraren åt oss. Om ordningen är viktig
måste vi ta hänsyn till den när vi ställer frågor, till exempel med ORDER BY.

Eftersom allt ligger ”huller-om-buller” i databsen tar det lång tid att söka något. Skall vi hitta till
exempel ”Kalle Anka” så måste databashanteraren börja från början och leta igenom varje post
tills den hittar rätt post. Är det väldigt många så tar det lång tid. Om vi vet att vi ofta kommer att
söka på till exempel efternamn kan det vara bra att skapa ett index till det fältet vilket kallas att
indexera. Ett index är inget annat än en tabell med alla fält sorterade i en viss ordning, till
exempel bokstavsordning. Fälten i indextabellen pekar sedan på posten i den riktiga tabellen.
Det gör att en effektivare sökning kan göras. Först kollas det man söker upp i den ordnade
indextabellen som sedan refererar till rätt ställe i den osorterade, riktiga tabellen. Indextabellen
hanteras av systemet så den behöver man aldrig tänka på. Det här låter ju kanon men
naturligtvis så finns det nackdelar. Att ändra och lägga till i en tabell med indexerade fält tar
längre tid än i de som inte är indexerade. Detta beror på att indextabellen måste byggas om så
fort något ändras. Därför bör man tänka sig för innan man indexerar i onödan. Har man en stor
databas som sällan uppdateras men som det ofta söks i (till exempel en telefonkatalog) bör man
överväga att indexera vissa fält, till exempel för och efternamn.
Gör nu laboration 2.

Copyright © 2005 Rejås Datakonsult
Var och en äger rätt att kopiera, sprida och/eller förändra detta dokument under villkoren i licensen "GNU Free
Documentation License", version 1.2 eller senare publicerad av Free Software Foundation, utan oföränderliga avsnitt,
utan framsidestexter och utan baksidestexter. En kopia av denna licens finns på http://rejas.se/gnu/.
Detta dokument, i ett format lämpligt för redigering, hittas på http://rejas.se/docs/lektion2 MySQL.sxw
Comments