选取了2中效率比较高的方式比较效率:row_Number() 、offset fetch
表test中有1000条数据,2个字段:field1(int),field2(nvarchar)
--1000条数据,查询500次第1-10行,39s --1000条数据,查询500次第500-550行,87s --1000条数据,查询500次第150-160行,88s DECLARE @uId int SET @uId=1 BEGIN while @uId<=500 BEGIN SELECT * FROM ( SELECT row_number() over( ORDER BY [dbo].[test].[filed1] desc) as rownum,* from [dbo].[test]) temp WHERE temp.rownum BETWEEN 150 AND 160;
SET @uId=@uId+1 END END;
--1000条数据,查询500次第1-10行,78s --1000条数据,查询500次第500-550行,78s DECLARE @uId int SET @uId=1 BEGIN while @uId<=500 BEGIN SELECT * FROM [dbo].[test] ORDER BY [dbo].[test].[filed1] DESC OFFSET (10 * (15 - 1)) ROWS FETCH NEXT 10 ROWS ONLY SET @uId=@uId+1 END END
测试效果:
row_Number()不稳定,考前的记录查询比较快,靠后的记录查询时间会增加
OFFSET FETCH 稳定,考前靠后的查询时间都是基本一样
|