日期:2014-05-17  浏览次数:20498 次

昨天去面试,对面非说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