三种SQL分页法

时间:2010-05-07 11:03:00 

表中主键必须为标识列,[ID] int IDENTITY (1,1)

1.分页方案一:(利用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

2.分页方案二:(利用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

 3.分页方案三:(利用SQL的游标存储过程分页)

create  procedure SqlPager
@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的游标存储过程分页)    效率最差,但是最为通用

标签:sql,分页,主键
0
投稿

猜你喜欢

  • python实现报表自动化详解

    2021-12-31 04:28:14
  • 转换字符串单词的第一个字母为大写

    2007-10-18 10:50:00
  • JavaScript中常用的简洁高级技巧总结

    2024-04-19 10:47:30
  • ant design vue 图片预览组件自定义样式

    2023-03-14 13:11:13
  • mysql 正则表达式查询含有非数字和字符的记录

    2024-01-15 11:26:21
  • python实现哈希表

    2022-12-16 09:00:19
  • 用python生成mysql数据库结构文档

    2021-05-15 12:04:33
  • Python3爬虫发送请求的知识点实例

    2023-04-17 19:16:32
  • 使用Python3内置文档高效学习以及官方中文文档

    2022-06-13 08:14:45
  • python matplotlib自定义colorbar颜色条及内置色条详解

    2023-04-03 16:50:34
  • Vue用v-for给循环标签自身属性添加属性值的方法

    2024-04-10 10:30:56
  • 使用typescript类型来实现快排详情

    2024-06-05 09:13:15
  • 举例讲解Python中is和id的用法

    2022-07-31 19:52:36
  • 在IE6中用PNG图片实现半透明效果

    2008-05-30 13:14:00
  • Pycharm5个非常有用的方法技巧

    2023-12-03 00:19:08
  • python 监测内存和cpu的使用率实例

    2022-07-03 23:49:49
  • php中加密解密DES类的简单使用方法示例

    2023-09-07 23:28:44
  • Go实现简易RPC框架的方法步骤

    2024-04-26 17:16:33
  • 用javascript实现的支持lrc歌词的播放器

    2024-04-10 14:03:33
  • Mysql常见的慢查询优化方式总结

    2024-01-26 02:17:04
  • asp之家 网络编程 m.aspxhome.com