分页方案一:(利用Not In和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 20 id
FROM TestTable
ORDER BY id))
ORDER BY ID

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id))
ORDER BY ID

-------------------------------------

分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 20 id
FROM TestTable
ORDER BY id) AS T))
ORDER BY ID

SELECT TOP 页大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 页大小*页数 id
FROM 表
ORDER BY id) AS T))
ORDER BY ID

-------------------------------------

分页方案三:(利用SQL的游标存储过程分页)
create procedure XiaoZhengGe
@sqlstr nvarchar(4000), --查询字符串
@currentpage int, --第N页
@pagesize int --每页行数
as
set nocount on
declare @P1 int, --P1是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as 总页数--,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用

在实际情况中,要具体分析。

***********************
(本人在max()里面的字段,也就是order by的字段建了索引,在数据量很大的情况下第一种方案的速度是第二种方案的上百倍)
***********************

转载于:https://blog.51cto.com/xu20cn/77999

sql server 分页相关推荐

  1. 解决hibernate对Sql Server分页慢的问题

    解决hibernate对Sql Server分页慢的问题 参考文章: (1)解决hibernate对Sql Server分页慢的问题 (2)https://www.cnblogs.com/firstd ...

  2. SQL Server分页存储过程实践(图解)

    下面来对SQL Server分页存储过程进行一下实做.图解成功的各个步骤. 一 找到大数据量的示例表 分页都是针对大记录数的表:反之有大记录数的表,可能就需要分页.例如银行用户表,就会上千万.下面先做 ...

  3. 优化的ms sql server分页sql语句

    优化的ms sql server分页sql语句 发布时间: 2009-8-15 00:00 |  发布作者: hjh |   |  查看: 3次 特点:一次查询,数据库Databnse只返回一页的数据 ...

  4. sql server分页_SQL Server中的分页

    sql server分页 Pagination is a process that is used to divide a large data into smaller discrete pages ...

  5. sql server分页_SQL Server中的分页简介

    sql server分页 Wikipedia Pagination is the process of dividing content (i.e. website search results, n ...

  6. SQL Server分页查询方法整理

    SQL Server数据库分页查询一直是SQL Server的短板,闲来无事,想出几种方法,假设有表ARTICLE,字段ID.YEAR...(其他省略),数据53210条(客户真实数据,量不大),分页 ...

  7. SQL Server 分页+json分享

    1.SQL Server 版本2012+ 新增SQL分页的写法 最近封装一个轻量级的ORM用到了分页,以前只知道使用Row_Number函数,现在发现sqlserver 新增的 {orderBy} o ...

  8. C#调用SQL Server分页存储过程

    以SQL Server2012提供的offset ..rows fetch next ..rows only为例 e.g. 表名:Tab1 ------------------------------ ...

  9. 曾经用过的Sql Server分页方法小结

    工作这些年, 数据库分页也用过几种方案, 总结如下: 1.用row_number函数及临时表分页, 适用sql 2005/2008. 大致思路如下: SELECT *, ROW_NUMBER() OV ...

最新文章

  1. redis.conf配置选项如下
  2. 计算机缺少php5.dll,php5isapi.dll 64位
  3. boost::hana::compose用法的测试程序
  4. 非负矩阵分解推导(NMF)
  5. 【Vue2.0】—事件处理和事件修饰符(二)
  6. iOS中使用UIActivityViewController系统分享到微信QQ微博包含文字图片URL
  7. git 远程代码被覆盖
  8. 【转】推荐一款Java反编译器,比较好用
  9. 黑莓8330、8830写号,上网,输入法,汉化
  10. 怎么升级计算机的操作系统,电脑如何升级系统版本_Windows10/7电脑升级系统版本的操作步骤...
  11. 服务器网卡,10GE设备相关笔记
  12. python修改xml文件内容,不废话,拿来即用
  13. 2018DeeCamp笔试题目第一套B卷
  14. 优先级Priority
  15. eot文件html,html – 为什么IE8没有加载我的eot文件?
  16. c语言中不能在变量名函数名关键字中插入,C语言中,不能在变量名、函数名、关键字中插入空格和空行。...
  17. 串口编程 - ascii字符与16进制的相互转换
  18. java中的逻辑结构
  19. 服务器物理架构部署图,部署图
  20. php程序员要不要转java

热门文章

  1. linux加密框架 crypto 算法管理 - 算法查找接口
  2. Linux加密框架crypto AES代码相关
  3. 英语口语-文章朗读Week10 Monday
  4. C语言 socket 编程学习
  5. 解决: Elements in iteration expect to have ‘v-bind:key‘ directives
  6. 版本控制:集中式(SVN) vs 分布式(GIT)
  7. 解决: java.net.ConnectException: Connection refused: connect
  8. Java中Web程序修改配置文件不重启服务器的方法
  9. 只用一套解决方案,就可解决80%的交通物流行业信息难题
  10. JS内置方法(Array)