"Peter Brodersen" <usenet2006@ter.dk> skrev i en meddelelse
news:e214e2$dsh$1@news.klen.dk...
> On Mon, 17 Apr 2006 22:59:09 +0200, "Harald" <nomail@noname.dk> wrote:
>
>>> Ud fra hvad du senere beskriver, lyder det i allerhøjeste grad som om,
>>> du godt kunne bruge et index på boger.forfatter.
>>Jeg har ikke et index på boger.forfatter, jeg forsøger at holde antal
>>index
>>på et minimum da jeg har en ide om at jo flere index jo større chance er
>>der
>>for at noget kan gå galt i tabellen, men der tager jeg måske helt fejl?
>
> Ja, det er meget ved siden af
>
> Hvis du ikke har et index på boger.forfatter, og du laver et opslag på
> en bestemt værdi for boger.forfatter, skal alle rækker kigges igennem
> for at finde rækker med den korrekte værdi.
>
> Det skal der så gøres for samtlige rækker i Forfatter.
>
> Hvis du laver en EXPLAIN, vil du sandsynligvis kunne se, at for hver
> af de 3.500 rækker i Forfatter, skal der kigges 7.500 rækker igennem i
> Boger. Det giver rigtigt, rigtigt mange rækker, når man ganger de to
> tal op mod hinanden.
>
> Du kan prøve at tilføje det index, og så lave dit opslag (som så vil
> være yderst hurtigt). Og evt. også lave en EXPLAIN bagefter for at få
> bekræftet, at antallet af rækker, der skal kigges på, er faldet
> tilsvarende.
>
> At tilføje et index vil tilføje en lille smule ekstra behandlingstid,
> når der skal tilføjes/rettes/slettes rækker, men for de tilfælde, hvor
> man skal lave et opslag for en bestemt værdi direkte på et felt, vil
> det stort set altid kunne betale sig at have et index.
>
> Der er ikke noget specielt magisk over indexes. Sammenlign med
> forfatter-kartoteket på et bibliotek, hvor bøgerne primært er sorteret
> efter kategorier/numre. Hvis du ikke gør brug af dette kartotek (eller
> det ikke findes), og skal finde alle bøger af en bestemt forfatter, så
> skal du kigge alle bogrygge igennem på hele biblioteket. Hvis du
> derimod starter med at slå op i forfatter-kartoteket, kan du let finde
> alle bøger skrevet af en bestemt forfatter - også selv om de er i vidt
> forskellige kategorier.
>
> "Ulempen" er, at biblioteket, når de får en ny bog, ikke blot skal
> sætte den på hylden, men skal også tilføje et kort i kartoteket
> (indexet). Dette er dog et minimum af arbejde.
>
> Arbejdet med at gøre brug af indexet er noget, database-serveren selv
> håndterer. Du skal ikke ændre din forespørgsel (SQL) på nogen måde,
> hverken når du henter data eller retter data.
>
> Vi kan også skære dit eksempel helt ned, så det måske bliver endnu
> mere klart:
>
> SELECT * FROM Boger WHERE Forfatter = 1234;
>
> Denne forespørgsel kræver, at alle rækker i Boger kigges igennem. Det
> er udelukkende for at finde én forfatter. Med et indeks på det
> pågældende felt, er rækken så sorteret på forhånd, så det er hurtigere
> at finde frem og se om dette forfatter-id optræder.
Jeg har nu prøvet at oprette et index på boger.forfatter og det nedsatte
tiden for at finde 40 poster fra 47 sek. til 0,06 sek. så det kan man jo
sige var en forbedring. Mange tak for svaret.
/HK