webForumDet fria alternativet

Optimera kod?

ASP

6 svar · 351 visningar · startad av Bosse168

Medlem sedan nov. 20031 018 inlägg
Frågan#1

Använder en MySQL databas som börjar bli rätt stor och undrar vilken som ni föredrar att räkna poster med ett visst id i en loop.
Just nu använder jag:

SQL="SELECT COUNT(postid) AS Antal FROM forumposter WHERE diskusid = "& Rs(1) &""

Set rsT=Server.CreateObject("ADODB.Recordset")
rsT.open SQL, Connect, 3,3

Ska jag använda den koden eller ska jag plusa på 1 i en tabell varje gång det skrivs en ny post och hämta den siffran istället?

Vilket är bäst resurs mässigt & lätthanterligast och framför allt hur gör ni proffs? :)

Medlem sedan nov. 20017 144 inlägg
#2

Jag hade nog gjort som du gör nu om inte det hela ligger i en annan loop.
(Förutom att, jag hade tagit bort &"" sist i sql-satsen samt kört med execute istället för open.)
I.o.f.s. så kanske du kan köra med rs.recordcount om du kör med open.
Så det hela beror nog på i vilken sammanhang det hela skall användas.

Medlem sedan nov. 20031 018 inlägg
#3

Jag vill bara räknar alla poster WHERE diskusid = "& Rs(1) &"

Medlem sedan maj 2001431 inlägg
#4

... plusa på 1 i en tabell varje gång det skrivs en ny post och hämta den siffran istället?

Ett forum har normalt betydligt fler läsningar än skrivningar så det finns fin prestanda att vinna på det. Det kräver dock lite mer logik vid inmatning/radering av poster. Men det tycker jag det är värt :)

Medlem sedan juni 20008 205 inlägg
#5

Herman skrev:

Ett forum har normalt betydligt fler läsningar än skrivningar så det finns fin prestanda att vinna på det. Det kräver dock lite mer logik vid inmatning/radering av poster. Men det tycker jag det är värt :)

Jag är mycket tveksam till att det är det. Det som faktiskt kostar är själva kontaktandet av databasen, jag har mycket svårt att tro att räknande av rader är någon särskilt betungande uppgift för DBMS:en. Det vore ett extremt hjärndött tillvägagångssätt av DBMS:en att rassla igenom varenda rad när den räknade rader. Någon som kan verifiera mina antaganden? (LarsG?)

Medlem sedan maj 200010 687 inlägg
#6

Jag vet att SQL-server kan vara lite slö med att räkna rader. Lägger man dock till några fina små index så blir det super-fast. :)

Ska man använda metoden med addering så är det viktigt att man har transaktionshantering så att inte datan blir inkonsekvent.

Men jag tycker att det är bättre att räkna antalet svar när man hämtar alla trådar. Exempel:

SELECT t.*, (SELECT COUNT(*) FROM tblPost WHERE PostThreadId = t.ThreadId) AS ThreadPostCount FROM tblThread t
INNER JOIN tblPost lp ON p.PostId = (SELECT MAX(PostId) FROM tblPost WHERE PostThreadId = t.ThreadId)
WHERE a = b ORDER BY lp.PostCreationDate DESC
Medlem sedan maj 200010 687 inlägg
#7

Jesper T skrev:

(Förutom att, jag hade tagit bort &"" sist i sql-satsen samt kört med execute istället för open.)

Fördelen med Open är ju att man kan få ett frånkopplat recordset. :)

269 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)