Avatar billede 3dmaxer.dk Nybegynder
24. november 2002 - 12:53 Der er 9 kommentarer

Hvorfor er denne kørsel så langsom? mysql

Når jeg kører denne i mysql:
update MEMBERS set antal=antal-1 where NAME='hans'

Så kan det tage op til 10 sek. før den er færdig, hvilket er aaalt for lang tid. jeg skriver specifikt hvad den skal gøre, og forstår derfor ikke hvorfor den tager så lang tid om det.

der er kun ca. 1400 records i tabellen
Avatar billede nemeier Nybegynder
24. november 2002 - 12:59 #1
Har du index på NAME eller få det.
Avatar billede 3dmaxer.dk Nybegynder
24. november 2002 - 13:16 #2
Hvis den er primary key, så er der index på ik?

Jeg har prøvet med
update MEMBERS set antal=antal-1 where ID=1

hvor der er primary key på ID, men det tager ligeså lang tid
Avatar billede nemeier Nybegynder
24. november 2002 - 13:22 #3
Er det en stor tabel ? Hvor meget fylder den på disken ?
Avatar billede 3dmaxer.dk Nybegynder
24. november 2002 - 13:47 #4
Ved ikke hvor meget den fylder, men den har somsagt ca. 1400 records og 50 felter. Jeg har tabeller der er langt større, så jeg tror ikke der er størrelsen.

Desuden bruges tabellen til en del af mit forum, og der er den ganske hurtig. Det er dorfor jeg ikke forstår, at den skal tage så lang tid om den ene kørsel.
Avatar billede mfalck Praktikant
24. november 2002 - 14:31 #5
prøv at køre en EXPLAIN på din update og se hvad den giver af info
Avatar billede kennie_nm Nybegynder
25. november 2002 - 14:16 #6
måske laver du (MySQL) et krydsprodukt med 1400*1400 > 1.5 millioner rækker
prøv at lave følgende forespørgsler:
  select id, antal from members where name = 'hans'
for hvert hit opdater:
  update MEMBERS set antal=antal-1 where id = $id

hvis det tager kortere tid, så er det nok fordi MySQL starter med at lave et krydsprodukt af hele tabellen
Avatar billede 3dmaxer.dk Nybegynder
26. november 2002 - 01:14 #7
Mfalck
Kan explain og descibe ikke kun bruges på SELECT? Den giver fejl ved update



Kennie

Kan du være lidt mere specifik om hvordan jeg skal køre dem. "for hver hit opdaterer" - eksempel please :)?

hvad gør $-tegnet?




btw, så kørte jeg den et par gange igen for at teste:
update MEMBERS set antal=antal-1 where NAME='hans'
det tog flere gange omkring 45 sek. - der er lang tid
Avatar billede kennie_nm Nybegynder
26. november 2002 - 09:30 #8
$ tegnet er bare PHP/Perl syntax for en variabel

pseudokode:
2d-array = select id, antal from members where name = 'hans'
for each ($i,$antal) in 2d-array
  update MEMBERS set antal=$antal-1 where id = $id
end for
Avatar billede 3dmaxer.dk Nybegynder
26. november 2002 - 10:28 #9
kennie

okay - jeg bruger asp :-)
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