Gå til innhold

Optimalisering av MySQL-database for indeksering


Knut Marius

Anbefalte innlegg

Jeg har en oppgave i skolesammenheng der jeg blant annet jobber med en rimelig stor database. Den ene tabellen inneholder ca. 100 millioner rader. Det tok rimelig lang tid å fylle tabellen, og nå viser det seg desverre at jeg nok har valgt feil indeksering. Tabellen består av 3 felter (movieID, userID og rating). Når jeg genererte databasen brukte jeg en compound primary index på movieID + userID, men etter å ha sett nærmere på SQL-spørringene jeg skal kjøre på databasen innser jeg at userID + movieID hadde vært mer effektivt. Jeg skal kjøre store mengder SELECT-spørringer (ikke INSERT), så det er viktig at indeksene er optimale.

 

Så til problemet mitt: Dette tar uhorvelig lang tid! Jeg startet denne omindekseringen på fredag kveld, og nå er det torsdag! (nei det har ikke tatt -1 døgn..)

Harddisken jobber som besatt hele tiden, noe jeg vil tro tyder på dårlig optimalisering med tanke på RAM-bruk blant annet. Jeg har ingen form for progress bar som forteller meg hvor langt i indekseringen jeg er nå, så det blir et større og større dilemma: Skal jeg avbryte nå, og dermed ha kastet bort nesten en uke, eller skal gi den "bare èn dag til" i håp om at den blir ferdig? For alt jeg vet kan maskina bare stå og henge nå..

 

Når jeg nå prøver å finne ut om jeg bør avbryte indekseringen så trenger jeg hvertfall å få litt input på hva som gjør at dette tar så lang tid. Er det noe jeg bare må regne med på grunn av de store datamengdene, eller finnes det paramterere i MySQL som gjør at dette kan gå vesentlig fortere? Såvidt jeg vet brukes vel en O(nlogn)-algoritme i indekseringen, så store datamengder burde ikke føre til en eksponensiell tidsbruk.

 

Maskina jeg kjører på er en laptop. Ja, jeg vet det ikke er optimalt, men den har tross alt en tokjernes E8400 CPU, 3 GB RAM, og kjører på win xp. Takknemlig for alle innspill som kan lede meg til å få unna denne jobben asap!

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...