magicgunnar Skrevet 14. april 2009 Del Skrevet 14. april 2009 Jeg har et script hvor jeg legger inn litt over 1000 oppføringer ved hjelp av INSERT. Dette går litt tregere enn jeg hadde håpet. Jeg har prøvd å slå sammen alle insert-setningene til 1, og jeg har også prøvd "Prepared Statements". Å slå sammen alle insert-setningene ga en liten gevinst, men er det noen muligheter for å optimalisere ytterligere? Lenke til kommentar
Frank2004 Skrevet 14. april 2009 Del Skrevet 14. april 2009 Jeg har et script hvor jeg legger inn litt over 1000 oppføringer ved hjelp av INSERT. Dette går litt tregere enn jeg hadde håpet. Jeg har prøvd å slå sammen alle insert-setningene til 1, og jeg har også prøvd "Prepared Statements". Å slå sammen alle insert-setningene ga en liten gevinst, men er det noen muligheter for å optimalisere ytterligere? Det er et must å gruppere flere oppdateringer i en transaksjon, altså begin; insert ...; insert ...; insert ...; commit; men når du er så ufin at du trykker alle inserts inn i ett statement, så har du alt funnet en måte å få til det på.. Det aller raskeste blir å bruke database-spesifikke verktøy for bulk import. Postgres, f.eks, har copy. Når det er snakk om veldig mange rader som skal importeres (1000 er ingenting), kan det lønne seg å droppe indeksene på tabellen først, og heller bygge dem på nytt når importen er ferdig. Lenke til kommentar
blackbrrd Skrevet 14. april 2009 Del Skrevet 14. april 2009 Du må gi oss litt mer info: a) hvor stor er hver rad? b) hvor mange indekser er det på tabellen? c) hva slags database kjører du på? d) hvordan har du konfigurert databasen? e) hva slags hardware kjører du på? Lenke til kommentar
magicgunnar Skrevet 15. april 2009 Forfatter Del Skrevet 15. april 2009 (endret) Du må gi oss litt mer info:a) hvor stor er hver rad? b) hvor mange indekser er det på tabellen? c) hva slags database kjører du på? d) hvordan har du konfigurert databasen? e) hva slags hardware kjører du på? Jeg er ikke noen ekspert på dette, men jeg har prøvd å svare på punktene etter beste evne: a) Hver rad har 8 felter. b) Tabellen har en primær index og en annen index. c) MySQL 5.0.45, InnoDB d) Litt usikker e) Akkurat nå tester jeg på en vanlig stasjonær maskin satt opp med wamp. Når jeg har testet med "Prepared Statements", så kjører jeg SET @id = "1", @value = osv. og deretter EXECUTE, hadde det vært mer effektivt å bruke php sin innebygde prepare-metode? Endret 15. april 2009 av magicgunnar Lenke til kommentar
magicgunnar Skrevet 15. april 2009 Forfatter Del Skrevet 15. april 2009 importerer du blobber? Mulig dette er et veldig dumt spørsmål, men hva er blobber? Lenke til kommentar
blackbrrd Skrevet 15. april 2009 Del Skrevet 15. april 2009 Binary Large OBjects Hvor tregt er tregt? Lenke til kommentar
magicgunnar Skrevet 15. april 2009 Forfatter Del Skrevet 15. april 2009 Binary Large OBjects Hvor tregt er tregt? Som oftest tar det fra 2,8 til 4,0 sekunder, men av og til hikker mysql og da kan det gå flere minutter, men det hører til sjeldenhetene. Lenke til kommentar
blackbrrd Skrevet 15. april 2009 Del Skrevet 15. april 2009 Tror 2,8-4 sekunder er relativt normalt. Flere minutter = mysql fail, mest sannsynlig pga table locks... Lenke til kommentar
magicgunnar Skrevet 15. april 2009 Forfatter Del Skrevet 15. april 2009 Tror 2,8-4 sekunder er relativt normalt. Flere minutter = mysql fail, mest sannsynlig pga table locks... Hm, er det noen måte å unngå table locks på? Lenke til kommentar
blackbrrd Skrevet 15. april 2009 Del Skrevet 15. april 2009 Jeg er ikke helt kjent med hvordan mysql/innodb fungerer, er vant med postgresql. Du kan jo prøve å google litt på temaet (table lock slow insert innodb) Har du noen foreign keys? Kan være at den andre tabellen er låst når du begynner insert-statementen din, og jeg tror innodb kjører table lock når du skal inserte/update data. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå