SQL SERVER 中有一个SET Rowcount的的设置,它的意思是使命令的处理在响应指定的行数之后停止处理命令,利用这个特点,我们可以借用它来在一个千万行级数据表中实现高性能分页查询。
缺点:不过该方式的查询只适合建立主键索引为(数字型)
USE Educae SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: 薛凯 -- Create date: 2012年4月19日 -- Description: 利用SET ROWCOUNT 分页 -- ============================================= CREATE PROCEDURE P_Pager_RowCount ( @pageIndex INT, --当前要显示的页码 @pageSize INT --每页分几行返回显示 ) AS DECLARE @lastId INT --最后一行记录的ID DECLARE @startRowCount INT --开始的行计数 SET @startRowCount = (@pageIndex-1)*@pageSize+1 --这行照抄吧 BEGIN --首先还是先返回总记录 SELECT COUNT(id) from test --设置ROWCOUNT SET ROWCOUNT @startRowCount --获取ROWCOUNT执行到最后一行的编号 SELECT @lastId = id FROM test ORDER BY id DESC --再次获取ROWCOUNT SET ROWCOUNT @pageSize --查询出分页记录 SELECT * FROM test WHERE id<=@lastId ORDER BY id DESC END GO
在代码中我用的是倒序,如果需要升序 将ORDER BY id ASC 注意两个地方都需要改
将WHERE id<=@lastId 改成 WHERE id>= @lastId
总结:其实性能方面还是很好的,缺点就是只能用于数字型的主键自增形式,对于Guid作为主键就不性了。