webForumDet fria alternativet

Paging med ROW_NUMBER() i SQL-Server

0 svar · 350 visningar · startad av inspiro

inspiroMedlem sedan sep. 2005673 inlägg
#1

Hej! Håller på att bygga en "custom paging" i ett .net-projekt och provade att använda ROW_NUMBER() som ska vara en nyhet i sql-server 2005 om jag förstått det rätt. Det fungerar riktigt bra och verkar mycket enklare än att hålla på med temp-tabeller som de flesta verkar köra med (row_number skapar väl iofs en temporär tabell).

Tänkte bara höra om jag har gjort rätt och om jag får bra prestanda med den här metoden? Exempelvis gör jag två db-anrop (först kollar jag hur många träffar jag får med min sökning totalt), hämtar ned svaret i koden och gör ett nytt anrop där jag då kör row-number-funktionen.

  1. Går det att slå ihop dessa två anrop till en enda (jag måste dock få tag på det totala antalet rader eftersom jag använder den siffran i koden)?

  2. Om jag har 10000 rader så hämtar ju den inre selectsatsen allihop... även om dessa aldrig returneras så måste de ju ändå ligga i minnet temporärt? Kan jag exempelvis bara hämta ut rätt id:n i den inre select-satsen och först när jag har hittat rätt poster så hämtar jag ut alla data (exempelvis med "IN" på nåt vis)?

// anrop 1:

SELECT COUNT(*) FROM Table 

// anrop 2:

@startRowIndex int,
@maximumRows int // skickas in från anrop 1!

SELECT OrderColumn, Name FROM         
  (SELECT Name, ROW_NUMBER() OVER (ORDER BY DateCreated DESC) AS OrderColumn FROM Table) AS MyTable
WHERE
  OrderColumn > @StartRowIndex AND
  OrderColumn <= (@StartRowIndex + @MaximumRows)
129 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)