--直接调用下面的语句直接使用
--插入测试数据200w条,可能会很久
create table Student(
Id int PRIMARY KEY identity(1,1),
Name nvarchar(50),
Age int
)
go
declare @i int
set @i=1
while @i<=2000000
begin
insert into Student(Name,Age)values('Name',18)
set @i=@i+1
end
go
--开始测试查询
declare @now datetime
--max方案 30
select 'max'方案
select @now=getdate()
--begin
select top 10 * from Student
where Id>(
select max(Id)
from (
select top 1999990 Id from Student order by Id)tt)
--end
declare @maxDiff int
select @maxDiff=datediff(ms,@now,getdate())
--top方案 76
select 'top'方案
select @now=getdate()
--begin
select top 10 * from Student
where Id not in(select top 1999990 Id from Student)
--end
declare @topDiff int
select @topDiff=datediff(ms,@now,getdate())
--row方案 33
select 'row'方案
select @now=getdate()
--begin
select *
from (
select row_number()over(order by tc)rn,*
from (select top 2000000 0 tc,* from Student)t
)tt
where rn>1999990
--end
declare @rowDiff int
select @rowDiff=datediff(ms,@now,getdate())
--row_number方案 13
select 'row_number'方案
select @now=getdate()
--begin
select *
from(
select top 200000 row_number()over(order by Id)rn,* from Student
)t
where rn>1999990
--end
declare @row_numberDiff int
select @row_numberDiff=datediff(ms,@now,getdate())
--记录结果
select '第2万页'页码,@maxDiff max方案,@topDiff top方案,@rowDiff row方案,@row_numberDiff row_number方案
--分析结果:只测试了两万
页码 max方案 top方案 row方案 row_number方案 -20 0000数据
第2万页 30 76 33 13
页码 max方案 top方案 row方案 row_number方案 -20 0000数据
第2万页 30 80 13 33
页码 max方案 top方案 row方案 row_number方案 -120 0000数据
第119999页 170 186 156 130
页码 max方案 top方案 row方案 row_number方案 -120 0000数据
第119999页 173 203 140 143
页码 max方案 top方案 row方案 row_number方案 -200 0000数据
第20 0000页 296 326 233 250
页码 max方案 top方案 row方案 row_number方案 -200 0000数据
第20 0000页 250 343 233 246
--加上排序测试
页码 max方案 top方案 row方案 row_number方案
第20 0000页 296 343 573 533
页码 max方案 top方案 row方案 row_number方案
第20 0000页 280 330 583 546
页码 max方案 top方案 row方案 row_number方案
第20 0000页 263 326 586 560