webForumDet fria alternativet

Prestanda asp->länkad db

ASP

5 svar · 360 visningar · startad av lolukokasos

Medlem sedan mars 2001196 inlägg
Frågan#1

Hej,
Jag har en länkad databas (Btrieve) via odbc. I mitt asp-skript kopplar jag via ett DSN-namn som finns på servern. Problemet kommer när jag ska plocka artiklar av en viss typ (~5500 st) i en select-box. Vad jag än testar med för tricks, vanligt recordset eller getrows, så tar det ca 20 s. Vilket jag tycker är för mycket. Om jag testar direkt i Access (Btrieve-db länkas med samma DSN) så går det blixtsnabbt.

Finns det någon som har något bra tips på förändring som jag borde göra?

Medlem sedan mars 20023 561 inlägg
#2

Visa kod...

Alternativt indexera/cacha resultatet.

Medlem sedan mars 2001196 inlägg
#3
con1.Open "DSN=PULAGER"
artikelTyp="KK"
' SELECT Artikel -------------------------------
rs.open "SELECT D1001_Artikelkod FROM PULAGER WHERE D1011_Artikeltyp='"& artikelTyp &"'", con1
f = rs.GetRows()
set rs=nothing
rader= ubound(f,2)
'response.Write rader
'response.Flush
artS = "<select name='artnummer'>"
For kol=0 to  rader
	nr = f(0,kol)
	artS = artS & "<option>"& nr &"</option>" &vbcrlf
next
artS = artS &"</select>"

Detta är koden (med getrows) tar ca 20 s. Kan ni utveckla det där med cacha och indexera.

Medlem sedan dec. 19995 874 inlägg
#4

Hej!

1. Försök att deklarera alla dina variabler som du använder.
2. Indexera din databas (då främst på D1011_Artikeltyp)
3. Använd cache vid andra hämtningen och förstör cachen när innehållet i PULAGER ändras. Du kan exempelvis spara hela din dropdown i application(), eller en textfil eller liknande.

Jag har inte jobbat med Btrieve så jag kan inte säga hur du skapar ett index eller om det ens går, men sök i din manual så hittar du det säkert.

Lycka till!

Medlem sedan mars 2001196 inlägg
#5

Tack Brimba för svar men...
1. tror inte det hjälper men jag ska testa
2. Indexera en affärssystemsdatabas känner jag inte för att göra. Men jag ska undersöka det.
3. Cachning, var gör man detta? I Btrieve eller i webservern? Det är väl svårt att få webservern att känna ifall tabellen har ändrats (flera gånger per dag) eller inte.

Tacksam för mer info kring cachning.

Medlem sedan dec. 19995 874 inlägg
#6

Om du lagrar innehåller i exempelvis application("arts") så när du sedan uppdaterar innehåller i databasen så sätter du application("arts") till tomt. Och när du skall hämta från databasen kontrollerar du först om application("arts") är tom eller inte. Om den är tom så fyller du på den (tar 20 sekunder), om den inte är tom så hämtar du den från application("arts") vilket borde gå betydligt fortare.
Detta förutsätter naturligtvis att du uppdaterar din tabell via webben där du kommer åt application().
Om du inte gör det så kanske det inte är jättenoga att det sker på sekunden och därför kan du exempelvis cacha den delen i exempelvis 60 minuter. Då sker det en uppdatering en gång per timma.
Tiden kan du kontrollera på samma sätt, så när du sätter application("arts") så sätter du även application("artsLastUpdate") och om den är större än 60 minuter jämfört med vad klockan är nu så uppdaterar du, annars låter du den vara.

Lycka till!

275 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)