Performance Flashcards
Hvad er en page? Og hvor stor er den?
En page er den mindste enhed, der hentes fra/skrives til harddisken og den er 8K.
Forklar dette performance tiltag: Buffer
Når man læser en page op fra databasen, så gemmer man den i RAM i et stykke tid, da den sandsynligvis skal bruges igen.
Forklar dette performance tiltag: Pre-fetching
Når en page læses op fra harddisken, læses de efterfølgende pages med op, fordi man gætter på, at de nok skal bruges om lidt.
Hvad betyder det at databasen er heap organiseret?
Hvis DBMS vælger at gemme en ny record i en tilfældig page, hvor der er plads, siger vi at tabellen er heap-organiseret eller at vi gemmer recorden i heapen.
Hvis DBMS i stedet vælger at gemme recorden efter et system siger vi at tabellen er indekseret
Hvad er en record?
Svarer til en række i en tabel. Så blot et antal attributter.
Forklar kort hvad et clustered indeks og non-clustered (NC) indeks er
Clustered indeks er en måde at organisere base data i en tabel.
NC er en anden måde at organisere sin tabel, men her refererer man til base data.
Hvor mange clustered index kan en tabel have?
I SQL Server kan en tabel kun have ét clustered indeks. Dette skyldes, at clustered indekset bestemmer den faktiske fysiske rækkefølge af dataene i tabellen. Når du opretter et nyt clustered indeks på en tabel, vil det erstatte det eksisterende clustered indeks, hvis der allerede er et.
Clustered indeks (træbaseret)
Hvilke data ligger i bladene og hvilke ligger i knuderne?
I et clustered indeks findes de faktiske records KUN i bladene.
I knuderne findes der blot den attribut som er lavet indeks på. Bemærk en page/knude kan holde op til 500 børn. Så træet bliver meget bredt i stedet for dybt.
Hvordan ser et søgetræ ud i et clustered indeks vs NC?
Det er det samme. Bortset fra i bladene.
I Clustered finder man base data i bladet og i NC finder man den attribut som indekset er lavet ud fra, samt en liste af pagenumre hvori man kan finde records med pågældende værdi.
Hvorfor bruger NC indeks fremfor clustered?
Man kan kun have et clustered indeks pr. tabel. Så hvis man stadig gerne vil kunne søge igennem en tabel, men på en anden attribut end den som clustered er baseret på, kan det være smart at lave et NC indeks, som er baseret på den anden attribut.
Hvad sker der hvis man sætter et nyt clustered indeks på en tabel?
Så vil ALLE records skulle flyttes rundt og bliver altså en dyr operation.
Forklar de 2 selects, når tabellen er heap organiseret.
Altså når der ikke er noget indeks på tabellen og records bliver indsat ‘tilfældigt’.
Den første select
Den laver en table scan. Fordi den ved ikke om der findes andre ‘Andersen20113’, så den skal søge hele tabellen igennem da den ikke er indekseret.
Den anden select
Denne forespørgsel returnerer de første 25 rækker fra tabellen, sorteret efter kolonnen “name”. Når der ikke er nogen indeksstruktur, skal databasen lave et table scan, sortere rækkerne og derefter vælge de første 25. Dette kan være ressourcetungt og tidskrævende.
Forklar de 2 selects, når tabellen har et clustered indeks
Den første select
Det vil gå betydelig hurtigere da der søges en den attribut som der lavet indeks på.
Den anden select
Samme tilfælde. Her vil DBMS kunne udnytte at tabellen er sorteret og kan derved undgå at lave en table scan.
Forklar de 2 selects, når tabellen har et Nonclustered indeks
Den første select
Det vil gå betydeligt hurtigere også. Men den skal samtidig også hente resten af base data i en anden page.
Den anden select
Det samme som ovenfor. Her skal den bare gøre det for alle 25. Men de er sorteret efter navn, så det gøres stadig ret effektivt.
Hvilke forespørgsler er indeks gode til?
SELECTs med WHERE dele
SELECTs med JOIN
SELECTS med ORDER BY