|
| Optimering af MySQL SQL Fra : Harald |
Dato : 19-03-08 18:33 |
|
SELECT SQL_CALC_FOUND_ROWS boger.*, butikker.Navn, butikker.IdnrButikker,
butikker.Ferielukket, forfatter.NavnForfatter, forlag.NavnForlag FROM boger
LEFT JOIN forfatter ON boger.forfatter = forfatter.idnrForfatter
LEFT JOIN forlag ON boger.forlag = forlag.idnrForlag
LEFT JOIN butikker ON boger.butiksid = butikker.butiksid
WHERE AntalLager>0 AND Aktiv=1 AND VisBoger=1 AND (forfatter.NavnForfatter
LIKE "%hans%")
ORDER BY forfatter.NavnForfatter, Titel, UdgivetAar, Pris
LIMIT 0,25
Jeg kører ovenstående på min MySQL 4.0.26 server og det tager ca. 2
sekunder, kan det på nogen måde gøres hurtigere? Vil en opdatering til MySQL
5.0 hjælpe?
Det er SQL_CALC_FOUND_ROWS og ORDER BY der tager tiden, undlader jeg disse 2
tager det kun ca. 0.02 sek. men jeg har brug for dem begge.
Jeg har forsøgt at oprette index men det gør ingen forskel.
/H
| |
Per Koch (23-04-2008)
| Kommentar Fra : Per Koch |
Dato : 23-04-08 22:01 |
|
Er du sikker på, at det altid kun tager 0,02 sek?
Hvis du umiddelbart forinden har kørt den første query, kan din server have
resultatet i sin cache - og så går det jo hurtigt næste gang.
Hvis det altid er hurtigt med din query på 0,02 sek. synes jeg du skal smide
resultatet i en midlertidig tabel - evt. på HEAP hvis det er et begrænset
dataset i størrelsen. Så kan du efterfølgende trække fra denne tabel af med
forventeligt kort tidsforbrug.
"Harald" <noname@nomail.dk> skrev i en meddelelse
news:47e14e46$0$90276$14726298@news.sunsite.dk...
> SELECT SQL_CALC_FOUND_ROWS boger.*, butikker.Navn, butikker.IdnrButikker,
> butikker.Ferielukket, forfatter.NavnForfatter, forlag.NavnForlag FROM
> boger
> LEFT JOIN forfatter ON boger.forfatter = forfatter.idnrForfatter
> LEFT JOIN forlag ON boger.forlag = forlag.idnrForlag
> LEFT JOIN butikker ON boger.butiksid = butikker.butiksid
> WHERE AntalLager>0 AND Aktiv=1 AND VisBoger=1 AND (forfatter.NavnForfatter
> LIKE "%hans%")
> ORDER BY forfatter.NavnForfatter, Titel, UdgivetAar, Pris
> LIMIT 0,25
>
> Jeg kører ovenstående på min MySQL 4.0.26 server og det tager ca. 2
> sekunder, kan det på nogen måde gøres hurtigere? Vil en opdatering til
> MySQL 5.0 hjælpe?
>
> Det er SQL_CALC_FOUND_ROWS og ORDER BY der tager tiden, undlader jeg disse
> 2 tager det kun ca. 0.02 sek. men jeg har brug for dem begge.
> Jeg har forsøgt at oprette index men det gør ingen forskel.
>
> /H
>
>
| |
Harald (04-05-2008)
| Kommentar Fra : Harald |
Dato : 04-05-08 20:21 |
|
"Per Koch" <pk@perkoch.dk> skrev i en meddelelse
news:480fa374$0$15886$edfadb0f@dtext01.news.tele.dk...
> Er du sikker på, at det altid kun tager 0,02 sek?
> Hvis du umiddelbart forinden har kørt den første query, kan din server
> have resultatet i sin cache - og så går det jo hurtigt næste gang.
> Hvis det altid er hurtigt med din query på 0,02 sek. synes jeg du skal
> smide resultatet i en midlertidig tabel - evt. på HEAP hvis det er et
> begrænset dataset i størrelsen. Så kan du efterfølgende trække fra denne
> tabel af med forventeligt kort tidsforbrug.
Ja det er altid ca. 0,02 sek.
Der kan være op til 150000 poster i resultatet og det stiger hele tiden, jeg
vil prøve at kikke på en midlertidig tabel løsning.
/H
| |
|
|