Avatar billede bongo20 Nybegynder
26. maj 2004 - 11:49 Der er 8 kommentarer og
1 løsning

Index forklaring

Hvad er det helt konkret der sker når man indexerer en tabel?

Laves der en ekstra tabel som kun sqlserveren kender til eller hvordan fungerer indexering?
Avatar billede arne_v Ekspert
26. maj 2004 - 12:03 #1
Der laves et index.

På en måde kan du godt opfatte den som en pseudo tabel med 2 felter:
  key
  placering af data
Avatar billede trer Nybegynder
26. maj 2004 - 12:04 #2
Et indeks er en b+ træ-struktur hvor noderne er data fra en eller flere kolonner i tabellen. På den måde kan du godt kalde det, at "det er en ekstra tabel som kun sqlserveren kender til".  Indeks fylder altså ekstra.

Et normalt - non-clustered - indeks påvirker ikke tabellen fysisk, men sql server vil vurdere indekset og anvende det når det er gavnligt (ved sorteringer, joins, where betingelser etc). Er der flere indeks som kan anvendes vælger den det bedste.

Et clustered indeks påvirker datas sorteringsorden - simpelt forklaret bliver tabellens data lagret i b+ træets struktur sammen med noderne.  Data er dermed presorteret modsat en normal tabel hvor der ikke garenteres nogen speciel orden ved udtræk.

Er det nok, eller har du behov for mere?
Avatar billede bongo20 Nybegynder
26. maj 2004 - 12:47 #3
Ok, jeg bliver da klogere :o)
Hvis nu jeg har lavet et index på et bestemt felt i min tabel via Enterprise manageren, hvordan reindexere jeg så tabellen, og/eller er det nødvendigt ?
Avatar billede arne_v Ekspert
26. maj 2004 - 12:59 #4
Det burde ske automatisk.
Avatar billede janus_007 Nybegynder
29. maj 2004 - 16:20 #5
Jeg formoder at når du skriver reindexere så er det fordi du gerne vil have nye records til at indgå i indexet? - Og ja som arne v skriver, det sker automatisk.
Det der til gengæld ikke sker automatisk er vedligeholdelsen af indexet, afhængig af hvor meget fri plads du har på dine index sider (fillfactor) og hvis du ikke har angivet den ved oprettelsen så er den default 100%, dvs. at for hver record du indsætter vil der foretages flere pagesplits og det vil i høj grad påvirke performance når du indsætter nye records.

Hvis der aldrig indsættes data i din tabel er fillfactor 100% ganske fint, men hvis du derimod har en masse inserts så vil jeg nok anbefale en lavere.. måske 70-80% alt afhængig af hvor meget du gider vedligeholde dit index. Den nemmeste måde for de fleste mennesker er at bruge Enterprise Manageren og vælge Management -> Database Maintenance Plans og lave en plan der reorganiserer data og index pages osv...


Hygge
Avatar billede janus_007 Nybegynder
29. maj 2004 - 18:00 #6
Nåja.. jeg kunne lige indsparke en fodnote *GG*, med b+træ struktur (b-tree), så menes der altså et ganske almindeligt binary tree.
Avatar billede arne_v Ekspert
29. maj 2004 - 18:18 #7
Øh - nu er jeg ikke MS SQLServer ekspert, men B-tree plejer at være
balanced tree ikke binary tree
Avatar billede trer Nybegynder
30. maj 2004 - 01:41 #8
Arne har ganske ret - det er en b+ struktur hvor der er flere nøgler på hver node. Et binært træ har kun 2 grene og hver gren slutter med 1 nøgle (leaf), et b+ træ har flere. B+ træet er mere komplekst kodningsmæssigt, men væsentligt hurtigere og opnår ikke så nemt ubalance som et binært træ.
Avatar billede janus_007 Nybegynder
08. juni 2004 - 22:21 #9
hmm njaaa, nu undersøgte jeg lige sagen lidt mere. Og jo jeg tog åbenbart fejl, men vil samtidig også sige at et B-tree også kunne stå for Bayer (åbenbart den originale designer bag algoritmen)....
Anyway jeg stødte på denne side i min søgen, hvis nogle skulle have interesse i det:
http://explanation-guide.info/meaning/B-tree.html

Og tak for korrektionen ;O)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester