webForumDet fria alternativet

Paging

8 svar · 350 visningar · startad av SteveP

StevePMedlem sedan mars 2003772 inlägg
#1

Här är min Paging kod.

Set ObjRs = Server.CreateObject("ADODB.RecordSet")
Set ObjConn = Server.CreateObject("ADODB.Connection")
	ObjConn.Open Connect_String()
	
	strScriptName = Request.ServerVariables("SCRIPT_NAME")
	
	intPageSize = 1
	IntPage = Request.QueryString("Page")
	If IntPage = "" then IntPage = 1
		 
	ObjRs.PageSize = IntPageSize
	ObjRs.CursorLocation = 3
	ObjRs.Open "spLCPFilesPaging" ,ObjConn, 3, 1
	
	If Not ObjRs.EOF then ObjRs.AbsolutePage = IntPage
	intTotalPages = ObjRs.PageCount
	intCurrentPost = 0
	
		if Request.Form("NewMain") <> "" then 
		Response.Redirect("Default.asp?Page=" & IntTotalPages )
		end if
	
				If not ObjRs.EOF then
	
				VarMainOrgID = Trim(ObjRs("OrgID"))
				VarMainFileTypeID = Trim(ObjRs("FileTypeID"))
				VarMainFileLocationID = Trim(ObjRs("LocationID"))
				VarMainFileID = Trim(ObjRs("LCPFileID")) 'PK
				VarMainBoxID = Trim(ObjRs("LCPBoxID"))
				VarMainSubCode = Trim(ObjRs("SubCode"))
				VarMainSequence = Trim(ObjRs("Sequence"))
				VarMainPartner = Trim(ObjRs("Partner"))
				VarMainOfficeList = Trim(ObjRs("OfficeList"))
				VarMainOpenDate = Trim(ObjRs("OpenDate"))
				VarMainCloseDate = Trim(ObjRs("CloseDate"))
				VarMainDescription = Trim(ObjRs("Description"))
				VarMainOldFileRef = Trim(ObjRs("OldFileRef"))
	
				End if
	
	do while not objRs.eof and intCurrentPost < objRs.pagesize
	

	intCurrentPost = intCurrentPost + 1
	objRs.movenext
	loop
	
		If cInt(IntPage) > 1 then
		VarPrevious = "<td align=""right"" width=""28"" valign=""top""><a href=""" & strScriptName & "?" & _
				"Page=" & IntPage - 1 & """>" &_
				"<img src=""images/main/dartleft.jpg"" border=""0"" WIDTH=""19"" HEIGHT=""21"">" & _
				"</a></td>"
	
		End if
	
		If cInt(IntPage) < cLng(IntTotalPages) then
			VarNext = "<td align=""right"" width=""28"" valign=""top""><a href=""" & strScriptName & "?" & _
				"Page=" & IntPage + 1 & """>" &_
				"<img src=""images/main/dartright.jpg"" border=""0"" WIDTH=""19"" HEIGHT=""21"">" & _
				"</a></td>"
		End if

objRS.Close
objConn.Close
Set objRS = Nothing
Set objConn = Nothing

Jag visar 1 record per sida och när jag executar Stored proceduren så returneras ca 80.000 records. Jag tycker det tar för lång tid att bläddra. Det tar ca 3-5 sekunder innan den byter sida till nästa record.

Kan jag på nåt sett dela upp pagingen? Att t e x först selectar dom första 3000, sen när man når Post nummer 2999 så selectar den posterna 3000-6000 osv.. Alltså 3000 i taget?

Detta skulle ge en enorm perfomance boost.

GladhMedlem sedan maj 20012 812 inlägg
#2

Du kan redan i din SP dela upp så att du enda får ut det antalet poster som du önskar.

http://www.hedgate.net så finns ett sådant exempel, men det verkar som om sidan är ner.

Tror även att något liknande skall finnas på http://www.4GuysFromRolla.com

Det du gör är att du skapar en temptabel och stoppar alla dina poster i den, med samma data som du har i din riktiga tabell, bara det att du lägger till ett extra ID-fält som räknar upp från 1.

När du sedan plockar ut datan från din riktiga tabell, så gör du all sortering och vilkor i den.

Sedan från din temptabell så plockar du ut den delmängd som du vill ha med hjälp av det nya ID som tabellen har.

- M

StevePMedlem sedan mars 2003772 inlägg
#3

Ok men kommer detta verkligen att gå fortare? Det måste ju ta en massa kraft att exportera alla dessa records och sedan göra en select?

PatrikBMedlem sedan mars 20002 836 inlägg
#4

I början kommer det att gå fortare .... men när du börjar att närma dig slutet av alla poster kommer det att gå seeeeegt som sirap.

Det man som utvecklare måste göra är att minska antalet möjliga records som kan returneras, ÄVEN fast det finns många fler. Kika på hur tex google, alta vista och diverse andra sökmaskiner gör .... max 20 sidor med ca 20 - 25 poster per sida.
Tänk dig annars den dagen när databasen har 800.000 poster att returnera .... hur kommer det att gå då?

Behöver man komma åt fler blir det till att bygga någon form av sökfunktion eller cachnings funktion

cya,
/PatrikB

StevePMedlem sedan mars 2003772 inlägg
#5

Det är logiskt det du säger PatrikB. Det jag utvecklar är ett System för filer så folk kan hålla reda på vart deras filer/dokument ligger. Ingen lär vara intresserad av att sitta och klicka sig igenom 80.000 records. Mer logiskt att tvinga dom till en sökning av olika slags alternativ, vilket i sin tur kommer dra ner på antalet poster avsevärt.

PatrikBMedlem sedan mars 20002 836 inlägg
#6

Om det är ett system som endast ska hålla reda på användarens filer så kan du ju lägga med ngn form av uniktid och plocka ut alla filer för det unikaid .... borde inte resultera i alla filer.

Om flera ska ha tillgång till samma fil behöver man nog en "djunktable" för att hålla reda på vilka användare som har "rätt" till vilka filer.

Fast .... efter ett tag så får ju varje användare oxå väldigt många filer

Men ... sökningen borde ändå finnas :e

cya,
/PatrikB

GladhMedlem sedan maj 20012 812 inlägg
#7

I början kommer det att gå fortare .... men när du börjar att närma dig slutet av alla poster kommer det att gå seeeeegt som sirap.

Det kommer gå lika fort helatiden.

Visst tar det en liten stund att flytta den 80000 poster till en temptabell och sedan plocka ut 1 post därifrån. Men det går lika fort att ta ut den första posten som den sista. Det spelar ingen roll.

Vad du vinner på detta är att du låter SQL Server hantera det den är bäst på. Och du själv endast får ut de antal record som du vill ha.

Givetviss så bör det finnas sökkritere så man kan minska ner den mängd data som måste sättas in i den nya tabellen.

- M

PatrikBMedlem sedan mars 20002 836 inlägg
#8

Den som finns på Hedgegate har jag själv provat och den går segare och segare ju längre ned bland posterna man kommer.
Varför ... det vet jag inte. Att "prova" den typen av paging med typ 1000 poster spelar ingen roll. Då märker du inte skillnaden.
Pumpa in run 100 000 poster och du märker skillnaden ..... MS SQL Server 7.0. Kanske är det annorlunda i SQL Server 2000

Likadant om man kör med Access vilket ger ännu sämre resultat, likadant med MySQL (går ju att bygga med LIMIT)

cya,
/PatrikB

GladhMedlem sedan maj 20012 812 inlägg
#9

Har aldrig testa med så många poster. Mitt urval brukar inte ge mig så många poster.

Det låter dock skumt att det är så, men har du testat så är det så. Kan dock inte förstå det. Skulle vara om man Indexerat sitt ID fel i temptabellen.

- M

136 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)