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? :)
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.
... 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 :)
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?)
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