/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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



Søg
Reklame
Statistik
Spørgsmål : 177428
Tips : 31962
Nyheder : 719565
Indlæg : 6407944
Brugere : 218877

Månedens bedste
Årets bedste
Sidste års bedste