ampyMedlem sedan feb. 20011 498 inlägg sql = "select fp.id_trad, fp.user_id, fp.datum, ft.subject, ft.rum, m.username, fp.id, ft.svar " & _
"From forum_posts fp inner join forum_topics ft on fp.id_trad = ft.id_trad " & _
"left outer join members m on fp.user_id = m.id " & _
"where ft.rum = 2 " & _
"order by fp.datum desc"
set rs = connect.execute(sql)
if not rs.eof then
response.write "<font color='#000000'>" & _
"<a title='"&rs(3)&"' href='showthread.asp?id="&rs(0)&"'>"
subject = rs(3)
if len(subject) > 18 then
subject = left(subject,18)&"..."
end if
response.write server.htmlencode(subject) & _
"</a>" & _
"<br><b>Av:</b> <a href='krypin.asp?id="&rs(1)&"'>"&rs(5)&"</a>" & _
"<br><b><font color='#FF0000'>"&changetime(rs(2))&"</font>" & _
"</b></font>"
last_id = rs(6)
thread_id = rs(0)
thread_rum = rs(4)
antalsvar = rs(7)
else
response.write "<center><b>Aldrig</b></center>"
end if
set rs = nothing
Denna kod tar 0,3 sekunder att utföra vilket jag tycker är ganska mycket på en server som har 2,2 MHz och 512 MB i minne.
Så hur ska man kunna göra så att denna kod körs snabbare?
Några tips?
Jag har skapat index för de flesta kolumner.
Databas är MySQL.
PeeerMedlem sedan mars 20025 907 inlägg Re: optimering av denna kod
ampy skrev:
Denna kod tar 0,3 sekunder att utföra vilket jag tycker är ganska mycket på en server som har 2,2 MHz och 512 MB i minne.
:OO ;)
Nä, men allvarlig. Man brukar ju höra att GetRows är bra prestandamässigt. Kanske skulle ta en titt på det?
ampyMedlem sedan feb. 20011 498 inlägg Hehe, råkade skriva fel! :e
Ska testa med getrows.
ampyMedlem sedan feb. 20011 498 inlägg Testade nu med getrows och det tar ju ännu längre tid. Får 0,375 sek.
sql = "select fp.id_trad, fp.user_id, fp.datum, ft.subject, ft.rum, m.username, fp.id, ft.svar " & _
"From forum_posts fp inner join forum_topics ft on fp.id_trad = ft.id_trad " & _
"left outer join members m on fp.user_id = m.id " & _
"where ft.rum = 2 " & _
"order by fp.datum desc"
set rs = connect.execute(sql)
if not rs.eof then
strDatat = rs.getrows()
Datat = 1
end if
set rs = nothing
if Datat = 1 then
response.write "<font color='#000000'>" & _
"<a title='"&strDatat(3,0)&"' href='showthread.asp?id="&strDatat(0,0)&"'>"
subject = strDatat(3,0)
if len(subject) > 18 then
subject = left(subject,18)&"..."
end if
response.write server.htmlencode(subject) & _
"</a>" & _
"<br><b>Av:</b> <a href='krypin.asp?id="&strDatat(1,0)&"'>"&strDatat(5,0)&"</a>" & _
"<br><b><font color='#FF0000'>"&changetime(strDatat(2,0))&"</font>" & _
"</b></font>"
last_id = strDatat(6,0)
thread_id = strDatat(0,0)
thread_rum = strDatat(4,0)
antalsvar = strDatat(7,0)
else
response.write "<center><b>Aldrig</b></center>"
end if
PeeerMedlem sedan mars 20025 907 inlägg set rs = connect.execute(sql)
if not rs.eof then
strDatat = rs.getrows()
Datat = 1
end if
[b]connect.close[/b]
set rs = nothing
Vet inte om det hjälper, men prova vet ja!
PaceMedlem sedan juni 20019 024 inlägg Optimera din SQL-fråga istället.
Kör med EXPLAIN-syntaxen (MySQL) för att läsa av om alla index är satta i "join-skarvarna" så att säga.
BrimbaMedlem sedan dec. 19995 875 inlägg
Jag har skapat index för de flesta kolumner.
Det är ju inte så bra.
Nu har jag inte arbetat med index i mySql, så jag vet inte hur det fungerar, men i SQLServer så beror det lite på om du väljer klustrat eller oklustrat index, och om du endast har unika poster i någon kolumn osv, men generellt sätt är det bra att indexera de kolumner som du ofta ställer WHERE-frågor mot.
LarsGMedlem sedan dec. 200012 464 inlägg Varför har du en outer join mellan members och forumposts?
Om du har inlägg av icke medlemmar så kan du skapa en medlem som heter Gäst så kan du använda en vanlig join istället.
ampyMedlem sedan feb. 20011 498 inlägg Det går bra med en vanlig inner join också, vet inte varför jag skapade det på en gång.
Men koden tar fortfarande 0,375 sekunder att köra.
Det där med EXPLAIN-syntaxen fattade jag ingenting av. :(
LarsGMedlem sedan dec. 200012 464 inlägg Du bör ha index på alla kolumner som du använder i join-villkoren. Om du tjänar på att ha index på rum beror på hur data är fördelat. Om nästan alla poster har värdet 2 i den kolumnen så hjälper ett index inte mycket.
ampyMedlem sedan feb. 20011 498 inlägg Kan någon förklara för mig vad EXPLAIN-syntaxen gör?
Fattade inte riktigt på MySQL's dokumentation.
ampyMedlem sedan feb. 20011 498 inlägg Märkte precis att:
order by fp.datum desc
Tar upp knappt två tiondelar.
Jag har indexerat kolumen datum men kan man inte få ner det på ett annat sätt?
LarsGMedlem sedan dec. 200012 464 inlägg Har det någon betydelse för prestandan om du gör
order by fp.datum asc
ampyMedlem sedan feb. 20011 498 inlägg LarsG: Nej.
crisse6: Ja.
Jag gjorde om sql-astsen så att den ser ut så här:
sql = "select fp.id_trad, fp.user_id, fp.datum, ft.subject, ft.rum, m.username, fp.id, ft.svar " & _
"From forum_topics ft inner join forum_posts fp on ft.id_trad = fp.id_trad " & _
"inner join members m on fp.user_id = m.id " & _
"where ft.rum = 2 " & _
"order by ft.senasteinlagg desc, fp.datum desc"
Och då fick jag ner det till 2 tiondelar.