06. februar 2004 - 11:06Der er
4 kommentarer og 1 løsning
Generel optimering af ASP og mySQL
Hej Eksperter
Jeg har for nyligt, konverteret min database fra Access til mySQL, og er nu blevet gevaldig træt af, at min Access (åbenbart) performede bedre end mySQL databasen.
Det er ikke abnormalt, at siderne hænger 15 sek eller mere, før de hentes. For mig virker dette underligt, da genereringstiden med Access aldrig var over 5 sek.
Derfor vil jeg gerne høre, om der er nogle generelle ting, man kan gøre for at optimere koden og evt. databasen? Ligeledes vil jeg gerne høre, om der er ting som er "Big no no's" i forbindelse med ASP og mySQL? Jeg må jo gøre et eller andet forkert.
Hvis i vil sek eksempler på kode, som er langsom, så sig endelig til.
'SQL = "SELECT photos.id, photos.name, path, category,addeddate FROM photos, categories WHERE category = categories.id AND monthpic = 0 AND hidden = 0 AND trip = 0 AND category <> 32 AND category <> 48 ORDER BY photos.id DESC limit 0,8"
SQL = "SELECT photos.id, photos.name,photos.path,photos.category,photos.addeddate FROM photos INNER JOIN categories ON photos.category = categories.id WHERE monthpic = 0 AND hidden = 0 AND trip = 0 AND categories.id <> 32 AND categories.id <> 48 ORDER BY photos.id DESC limit 0,8" set RS = conn.execute(SQL)
rowcounter = 0 counter = 0
if RS.EOF then
response.write("<font color='#CCCCCC'>Ingen billeder fundet i databasen</font>")
'SQL = "SELECT photos.id, MAX(comments.id) AS lastcommentid FROM photos, comments WHERE photos.id = comments.photo AND category <> 15 AND category <> 32 GROUP BY photos.id ORDER BY lastcommentid DESC limit 0,4"
SQL = "SELECT photos.id, max(comments.id) AS lastcommentid FROM comments INNER JOIN photos ON photos.id = comments.photo WHERE photos.category <> 15 AND photos.category <> 32 GROUP BY photos.id ORDER BY lastcommentid DESC limit 0,4"
set RS = conn.execute(SQL)
if RS.EOF then
response.write("<font color='#CCCCCC'>Ingen billeder fundet i databasen</font>")
'SQL = "SELECT name, path, comments.addeddate, category FROM photos,comments WHERE photos.id = comments.photo AND photos.id = " & RS("id") & " ORDER BY comments.id DESC;"
SQL = "SELECT photos.name,photos.path,comments.addeddate,photos.category FROM comments INNER JOIN photos ON photos.id = comments.photo WHERE photos.id = " & RS("id") & " ORDER BY comments.id DESC" set RS1 = conn.execute(SQL)
nameStr = RS1("name") if len(nameStr) > 20 then nameStr = left(nameStr,20) & "..."
response.write("<div style='color:#999999;'>Du skal være logget ind, for at se afstemninger.</div>")
else
SQL = "SELECT id, topic FROM votes WHERE TO_DAYS(now()) - TO_DAYS(enddate) < 0 AND active = 1 ORDER BY startdate DESC limit 0,1" set RS = conn.execute(SQL)
'SQL = "SELECT COUNT(*) AS found FROM vote_replys,vote_choices WHERE vote_replys.choice = vote_choices.id AND author = " & session("userid") & " AND vote = " & RS("id") SQL = "SELECT COUNT(*) AS found FROM vote_replys INNER JOIN vote_choices ON vote_replys.choice = vote_choices.id WHERE vote_replys.author = " & session("userid") & " AND vote_choices.vote = " & RS("id")
set RS1 = conn.execute(SQL)
userfound = RS1("found")
'SQL = "SELECT COUNT(*) AS found FROM vote_replys,vote_choices WHERE vote_replys.choice = vote_choices.id AND vote = " & RS("id") SQL = "SELECT COUNT(*) AS found FROM vote_replys INNER JOIN vote_choices ON vote_replys.choice = vote_choices.id WHERE vote_choices.vote = " & RS("id")
'SQL = "SELECT vote_choices.id,vote_choices.topic FROM vote_choices,votes WHERE vote_choices.vote = votes.id AND votes.id = " & RS("id") & " ORDER BY vote_choices.id" SQL = "SELECT vote_choices.id,vote_choices.topic FROM vote_choices INNER JOIN votes ON vote_choices.vote = votes.id WHERE votes.id = " & RS("id") & " ORDER BY vote_choices.id"
set RS1 = conn.execute(SQL)
do while not RS1.EOF
if userfound > 0 then
'SQL = "SELECT COUNT(*) AS found FROM vote_replys,vote_choices WHERE vote_replys.choice = vote_choices.id AND vote = " & RS("id") & " AND vote_replys.choice = " & RS1("id")
SQL = "SELECT COUNT(*) AS found FROM vote_replys INNER JOIN vote_choices ON vote_replys.choice = vote_choices.id WHERE vote_choices.vote = " & RS("id") & " AND vote_replys.choice = " & RS1("id")
response.write("<div style='height:20px;padding:3px;margin-bottom:10px;border:1px solid #ECECEC;background:#F7F7F7;'>Top 5 kommentatorer sidste 7 dage</div>")
SQL = "SELECT COUNT(*) AS found, comments.author,firstname,lastname,email FROM comments,users,photos WHERE comments.author = users.id AND photos.id = comments.photo AND comments.author <> photos.author AND TO_DAYS(now()) - TO_DAYS(comments.addeddate) <= 7 GROUP BY comments.author ORDER BY found DESC limit 0,5"
'SQL = "SELECT COUNT(*) AS found, comments.author,users.firstname,users.lastname,users.email FROM comments INNER JOIN users ON users.id = comments.author AND comments ON photos.id = comments.photo WHERE comments.author <> photos.author AND TO_DAYS(now()) - TO_DAYS(comments.addeddate) <= 7 GROUP BY comments.author ORDER BY found DESC limit 0,5" set RS = conn.execute(SQL)
Du har jo 'konverteret' sql'en til mySql kan jeg se :)
Jeg vil forslå dig at du bruger udluknings metoden og starter med at teste respons tiden fra hvert enkelt forspørgelse (fra top down), simpelthen starte med den første ...er den ok så test den og den næste osv osv.
Det vil altså sige, at der ikke er noget af det som ser decideret forkert ud ? Men det kan så være, at noget af det er for ressourcekrævende ? Har jeg forstået det korrekt ?
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.