ALTER PROCEDURE [dbo].[SP_tblTest_SelectSpecificRecordsWithCTE]
@FromRow int = 1000000,
@PgSize int = 10
AS
BEGIN
;WITH RecordsRN AS
(
select ID, colValue, ROW_NUMBER() over(order by colvalue) as Num from tblTest
)
SELECT ID Value, colValue Text FROM RecordsRN WHERE Num between @FromRow AND (@[email protected])
END
това е заявката, която използвам за страниране. използвайте го и ще получите желаните 10 записа за 4-5 секунди. Получавам 10 записа за 3 секунди и общите записи в моята база данни са 10 милиона, не използвайте топ 10, той ще донесе само едни и същи 10 записа всеки път. в моя случай поддържам размера на страницата и номера на началния ред (@FromRow) в сесията и предавам тези две стойности на дадената по-долу съхранена процедура и получавам резултата. Освен това, ако използвате SQL 2012, може да искате да използвате OFFSET и Извличане на следващите 10 реда нещо подобно. потърсете в google за ключова дума OFFSET и ще видите желания резултат отгоре.
благодаря