fordi der bliver opbygget et søgetræ. Det fylder plads at opbevare, samt man ligeledes skal opdatere dette søgetræ, udover man også indsætter på normal vis, når der indsættes i databasen!
Nu valgte jeg osteskorper, fordi det næppe er manges livret. For strengt taget giver det kun en forbedring hvis det er et mindre antal tupler man skal returnere som svar. Groft sagt igen: med et index behøver databasen stort set kun kigge på de relevante tupler. Er det 5 ud af et samlet antal på 100.000 kan du selv fornemmer forskellen.
Men skriver du så != vi den i ovenstående eksempel skulle aflevere 99.995 tupler - stort set dem allesammen - og så er der li'som ingen besparelse, kun ekstra besvær med at indsætte og slette fra indexet. Det kan så formentlig ikke betale sig.
Så konklusionen er, at det kun kan betale sig at benytte index'ering når, man kan konstatere at hovedparten af ens SELECT's kun vil returnere et begrænset antal 'tupler' ?
Ja. Men det er en kunst at vælge korrekt - eller er det en videnskab? Dem der kan sådan noget som det her på fingerspidserne, bliver højtlønnede databaseadministratorer i de store virksomheder... :)
Nåh, ja, ved joins generelt vil der blive brugt indexer hvis databaseserveren mener det kan betale sig. Så laver du mange, bestemte, joins skal du overveje indexer på samme måde som ved selects.
I dit eksempel vil medarbejder.medarbejder_id sikkert være primær nøgle (og dermed indexeret), og så er balance.medarbejder_id en fremmednøgle, og bør være indexeret. I nyeste mysql, med den rigtige tabel- implementation nedenunder, vi mysql vist nok forlange at den er indexeret, når man specificerer den som fremmednøgle.
Det er et aikre at hver tupel (række) i tabellen med sikkerhed har en unik identifikation, så du efterfølgende kan referere til hver enkelt række. Der behøver ikke være en PK, men prøv at tage sådan en tabel ind i phpmyadmin - så kan du pludselig ikke redigere og slette enkelte rækker. fordi det ikke længere giver mening.
Joh, nødvendig hvis du efterfølgende skal gøre noget fornuftigt ved tabellen. Har du et andet felt, der har samme karakteristika som en PK, så gør den da til PK.
Der kan da godt tænkes tilfælde hvor en PK kan undværes, måske. Jeg kan nu ikke lige komme på én.... at MySql tillader, at man ikke har en PK er en anden sag.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.