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
det är frågan jag använder för personsökning. använd den och du kommer att få dina önskade 10 poster på 4-5 sekunder. Jag får 10 poster på 3 sekunder och det totala antalet rekord i min db är 10 miljoner, använd inte topp 10 det kommer bara att ge samma 10 poster varje gång. i mitt fall bibehåller jag sidstorlek och startradnummer (@FromRow) i sessionen och jag skickar dessa två värden till nedanstående lagrade procedur och får resultatet. Ytterligare mer om du använder SQL 2012 kanske du vill använda OFFSET och hämta nästa 10 rader typ. sök på google om OFFSET nyckelord och du kommer att se ditt önskade resultat överst.
tack