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

新版数据库分页方法(Sql server2012)

时间:2015-12-19 15:06:38      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

1. ROW_NUMBER() 的分页方法
dbcc freeproccache
dbcc dropcleanbuffers
set statistics time on
set statistics io on
set statistics profile on;
 
with #pager as 
(
select ID,Title,ROW_NUMBER() OVER(Order By ID) as rowid from Article_Detail 
)
select ID,Title from #pager where rowid between (15 * (50-1)+1) and 15 * 50
 
 
set statistics profile off;

2. Offset and Fetch 的分页方法

--语法

OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
 
FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
--代码示例
dbcc
freeproccache dbcc dropcleanbuffers set statistics time on set statistics io on set statistics profile on; select ID,Title from Article_Detail order by id OFFSET (15 * (50-1)) ROW FETCH NEXT 15 rows only set statistics profile off;

1.在 Sql Server 2012 里面,分页方法中,Offset and Fetch 同 ROW_NUMBER() 比较起来,无论是性能还是语法,都是有优势的。

2.但是性能方面,优势并不是太大,两者 的 IO 消耗完全相同,只是 在 CPU 方面,Offset and Fetch 方面要好一些,但是不明显。如果对于一个 每秒都要处理成千上万条的分页Sql语句的DB 来说,Offset and Fetch 在CPU 方面的优势会比较明显的,否则,性能的提升并不明显。

3.语法方面 Offset and Fetch 则是十分的简洁,一句搞定,比起 Row_Number() 好了太多 ~

  

新版数据库分页方法(Sql server2012)

标签:

原文地址:http://www.cnblogs.com/renfushuai/p/5059093.html

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