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 er den forespørgsel, jeg bruger til personsøgning. brug det, og du vil få de ønskede 10 poster på 4-5 sekunder. Jeg får 10 poster på 3 sekunder, og de samlede rekorder i min db er 10 millioner, brug ikke top 10, det vil kun bringe de samme 10 poster hver gang. i mit tilfælde bibeholder jeg sidestørrelse og startrækkenummer (@FromRow) i sessionen, og jeg sender disse to værdier til nedenstående lagrede procedure og får resultatet. Yderligere, hvis du bruger SQL 2012, vil du måske bruge OFFSET og Hent de næste 10 rækker. søg på google om OFFSET søgeord, og du vil se det ønskede resultat øverst.
tak