Avatar billede suhl Nybegynder
14. maj 2008 - 09:52 Der er 6 kommentarer og
1 løsning

clustered index

hejsa
Jeg har lidt svært ved at gennemskue indekseringen i MySQL i forhold til den databaseteori jeg fik stoppet ind i hovedet af min underviser.
Jeg lærte om 3 forskellige typer indeks, primary index, clustered index og secondary index.(ved godt der er flere, men de er ikke relevante for mig lige nu)
Vi lærte at clustered index var godt at lave på ikke-unikke felter, da et enkelt felt i indeks kunne pege på en hel blok af felter i tabellen.
Når jeg læser dokumentationen for MySQL, synes jeg det lyder som om clustered index kun kan laves på unikke felter og det giver ingen mening for mig idet der så er en en-til-en sammenhæng mellem indexfelter og tabelfelter(hvilket jeg troede var definitionen på et ikke-clustered index).
Er der nogen der kan give mig et hint om hvor det går galt for mig?
Avatar billede coderdk Praktikant
14. maj 2008 - 10:05 #1
MySQL (med InnoDB) laver PRIMARY KEY til et clustered index. Har den ikke en PRIMARY KEY bliver den første UNIQUE nøgle et clustered index. Clustering laver ikke kun om på indekset, men også på selve data - ved clustering bliver data "sekventielle" i forhold til nøglen...

MySQL (med MyISAM) har ikke clustered indexes, så vidt jeg ved.
Avatar billede suhl Nybegynder
14. maj 2008 - 10:26 #2
tror måske jeg forstår lidt nu ;-)det du beskriver er det vores underviser(og bog) kalder primary index - dvs en pointer per blok i den fysiske lagring og dermed også et clustered(min fejl i indlægget). Den måde jeg har forstået der er størst fordel ved et clustered index, er dog stadig hvis det er ikke-unikt felt der indekseres på, så man kan pege på en blok med ens værdier. dog har jeg også lige efter 8'ende gennemlæsning af bogen, set at clustered index skal være på det felt der bestemmer den fysiske lagring.
Kan det lade sig gøre at ændre hvilken fil der bestemmer den fysiske lagring af filerne, så det ikke er primary key(der jo per definition skal være unik)?
Avatar billede coderdk Praktikant
14. maj 2008 - 11:21 #3
Ikke helt forstået - Den fysiske lagring af filerne? Du kan definere et data- og et index directory, og du kan partitionere tabeller...
Du kan evt. kigge på InnoDB storage engine:

http://dev.mysql.com/doc/refman/5.0/en/innodb.html

:)
Avatar billede suhl Nybegynder
14. maj 2008 - 11:37 #4
med den fysiske lagring mener jeg hvordan data fra tabellen er ordnet på disken - altså rækkefølgen. hvis index og data er ordnet efter samme felt(alfabetisk, numerisk eller lignende)har jeg forstået at søgning skulle være hurtigere.
Dvs forskellen på primær og sekundær index er at ved primær er data og index ordnet på samme måde(efter samme felt) og ved sekundær er index ordnet efter det felt der indekseres på, mens data er ordnet efter "ordering field" i tabellen - dvs efter forskellige felter.
Jeg har været inde på linket, men er ikke sikker på om jeg forstår det rigtigt. hvis jeg gør, så skulle det være det de mener med følgende sætning
"Accessing a row through the clustered index is fast because the row data is on the same page where the index search leads."
skal lige nævnes at deres clustered index og mit primær indeks tilsyneladende er det samme :-D
Men selvom det er det de skriver der, kan jeg stadig ikke finde at man selv kan bestemme efter hvilket felt data skal gemmes på disken.

Håber mit nye volapyk er lidt mere  forståeligt ;-)
Avatar billede coderdk Praktikant
14. maj 2008 - 12:02 #5
Ved et clustered index er data på samme dataside som indexnøglen, den skal mao ikke søge på disken efter data...
Igen, et clustered index er PRIMARY KEY eller den første UNIQUE ;) Du kan altså ikke lave et clustered index på et ikke-unikt felt...
Avatar billede suhl Nybegynder
15. maj 2008 - 10:16 #6
ok - takker. smid lige et svar, da du sådan set har svaret på mit spørgsmål :-)
Avatar billede coderdk Praktikant
15. maj 2008 - 10:44 #7
Aight :)
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