码迷,mamicode.com
首页 > 数据库 > 详细

sqlserver两种分页方法比较

时间:2017-12-14 21:08:15      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:方法   create   class   gpo   sqlserver   post   bsp   number   where   

-- 3000 page(从1开始) 10 pagesize --

 

方法1(效率不高):

SELECT TOP 10 * FROM [xxx].[oooo]
WHERE
id NOT IN
(SELECT TOP (10*(3000-1)) id FROM [xxx].[oooo] ORDER BY createtime DESC)
ORDER BY createtime DESC;

 

方法2(效率高):

SELECT TOP 10 *
FROM
(SELECT ROW_NUMBER() OVER (ORDER BY createtime DESC) AS RowNumber,* FROM [xxx].[oooo]) as A
WHERE RowNumber > 10*(3000-1) ORDER BY createtime DESC;

 

方法1没什么好讲的,方法2是利用ROW_NUMBER()函数给表oooo的数据按照createtime字段ORDER BY的顺序给每条数据加上一个序号,然后把这个RowNumber和其它列组成一个新表,再根据这个RowNumber进行分页。

 

ps:ROW_NUMBER()函数在sqlserver 2005之后才有

 

效果的话,我的表有6W多数据,每页10条数据查询第3000页,方法1平均需要6 7s,方法2平均只需要0.1 2s。

sqlserver两种分页方法比较

标签:方法   create   class   gpo   sqlserver   post   bsp   number   where   

原文地址:http://www.cnblogs.com/shamo89/p/7641143.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!