Gå til innhold

Anbefalte innlegg

Skrevet

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?

Videoannonse
Annonse
Skrevet
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.

Skrevet

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å?

Skrevet (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 av magicgunnar
Skrevet
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.

Skrevet

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.

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...