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