昨天去面试,对面非说1000W条数据分页查询要2秒以上,贴测试结果。
5年前第一次将分页语句用于某门户网站时依稀记得做过测试,插了几百万条数据在0.01秒以下,昨天去一家公司面试,谈到此事,对面技术说起千万级数据查询要2秒以上。
有疑惑今天就做了测试。
declare @i int set @i=1 while @i<=10000000 begin
insert into tt values('aa') set @i = @i + 1 end
首先插了1000万条数据,破机器插了30分钟左右。
declare @d datetime
SET @d=getdate()
select top 10 * from tt where Id not in(select top 1000000 Id from tt)
SELECT [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
开始测试,分别测试了3种分页,时间如下:
select top 10 * from tt where Id not in(select top 1000000 Id from tt) 530-590毫秒
select top 10 * from tt where Id> (select max(Id)from (select top 1000000 Id from tt order by Id)tt) 7-9秒
SELECT * FROM (SELECT ROW_NUMBER() OVER (order by T.ID desc)AS Row, T.* from tt T ) TT WHERE TT.Row between 1000000 and 1000050 16-27秒
顺便问下还有效率更高的没。。
------解决方案--------------------SQL SERVER2012新分页方式
http://topic.csdn.net/u/20120319/19/fb516bd9-f600-430a-8d0f-ed6a911f4ca2.html?33482