Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse
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
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 av magicgunnar
Lenke til kommentar

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

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...