`
arpenker
  • 浏览: 372107 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

SQL常用分页的办法

SQL 
阅读更多
淘二哥女装专业导购
http://www.tao2ge.com

文章分类:数据库
表中主键必须为标识列,[ID] int IDENTITY (1,1)

1.分页方案一:(利用Not In和SELECT TOP分页)

语句形式: 
SELECT TOP 页记录数量 *
FROM 表名
WHERE (ID NOT IN
  (SELECT TOP (每页行数*(页数-1)) ID
  FROM 表名
  ORDER BY ID))
  ORDER BY ID
//自己还可以加上一些查询条件


例:
select top 2 *
from Sys_Material_Type
where (MT_ID not in
    (select top (2*(3-1)) MT_ID from Sys_Material_Type  order by MT_ID))
order by MT_ID



2.分页方案二:(利用ID大于多少和SELECT TOP分页)

语句形式:
SELECT TOP 每页记录数量 *
FROM 表名
WHERE (ID >
          (SELECT MAX(id)
    FROM (SELECT TOP 每页行数*页数 id  FROM 表
          ORDER BY id) AS T)
      )
ORDER BY ID

例:
SELECT TOP 2 *
FROM Sys_Material_Type
WHERE (MT_ID >
          (SELECT MAX(MT_ID)
          FROM (SELECT TOP (2*(3-1)) MT_ID
                FROM Sys_Material_Type
                ORDER BY MT_ID) AS T))
ORDER BY MT_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



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

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

相关推荐

    一个简单的分页例子-jsp分页

    在Web开发中,分页技术是一种常用的解决办法,它能够有效地将大量数据分成若干个小部分进行展示,提高用户体验并减轻服务器压力。本文将通过一个具体的JSP分页示例来详细解析分页技术的实现过程。 #### 二、分页...

    模拟pageHelper的JavaWeb分页源码与开发文档.rar

    在JavaWeb开发中,PageHelper是一个非常常用的分页插件,它简化了数据库查询的分页操作,使得在处理大量数据时能有效地管理和展示信息。本压缩包包含的"模拟pageHelper的JavaWeb分页源码与开发文档"提供了一个理解和...

    几个常见的php类-分页,数据库,session,cookie,上传类

    常用方法: - `start()`: 启动或恢复session。 - `set($key, $value)`: 存储session变量。 - `get($key)`: 读取session变量。 - `unsetKey($key)`: 删除指定的session变量。 - `destroy()`: 销毁所有session...

    10种Java开发者编写SQL语句时常见错误

    - 解决办法:为常用查询创建合适的索引,优化查询语句,避免全表扫描,同时关注数据库的执行计划。 7. **不使用存储过程和函数**: - 错误:过度依赖Java代码处理业务逻辑,而忽视了数据库的存储过程和函数功能。...

    oracle常用操作(创建数据库等操作)

    7. 外键冲突导致数据导入失败解决办法 当外键约束导致导入失败时,可以先禁用外键约束,导入数据后再启用: ```sql ALTER TABLE 表名 DISABLE CONSTRAINT 外键名; -- 进行数据导入 ALTER TABLE 表名 ENABLE ...

    asp.net aspnetpager分页统计时与实际不符的解决办法

    ### ASP.NET ASPNetPager分页统计时与实际不符的解决办法 #### 背景介绍 在进行ASP.NET开发过程中,经常会遇到数据分页的需求。ASPNetPager是ASP.NET中的一个常用的分页控件,它可以帮助开发者实现数据的分页显示。...

    基于Oracle数据库海量数据的查询优化研究.pdf

    优化 SQL 的数据操作为:1) 通过减少查询次数来降低请求系统资源的频率,而采取快照、显形图等这样 的分布式数据库对象是降低数据库次数的好办法。2) 查询最好用相同或更类似 的 SQL 语句执行,这既能充分利用 SQL ...

    通用mapper源码、笔记、资料_java_源码.zip

    - **高级特性**:如自定义SQL,分页查询,一对多或多对一关联映射,动态SQL等。 - **问题排查**:常见错误及其解决办法,性能优化建议。 4. **资料** 资料可能涵盖: - **官方文档**:详尽的API参考和使用指南...

    java中ResultSet遍历数据操作

    例如,在使用 Oracle 数据库进行分页查询时,我们可能会使用以下 SQL 语句: ```sql select tm.* from (select rownum rm, t.* xmlrecord from testtable t) tm where tm.rm > ? and tm.rm ``` 在 Java 中,我们...

    C#编程经验技巧宝典

    76 <br>0112 获得字符串中大写字母的个数 77 <br>0113 获得某字符在字符串中最后出现的位置 78 <br>0114 如何找出字符串中某一字符的所有位置 78 <br>4.3 常用字符及字符串处理技术 79 <br>...

    新手学习PHP问题总结.

    MySQL 3.22版本及之后支持分页查询,因此在编写SQL语句时需要注意当前使用的MySQL版本。 6. **结果集处理** ```php $row = mysql_fetch_object($rs); $id = $row->id; $title = $row->title; $asker = $row->...

    最新Java面试宝典pdf版

    18、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? 107 19、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  2.4.2 事件处理接口  2.4.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  2.4.2 事件处理接口  2.4.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  2.4.2 事件处理接口  2.4.3 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     2.2.3 常用的ORM中间件  2.3 实体域对象的其他持久化模式  2.3.1 主动域对象模式  2.3.2 JDO模式  2.3.3 CMP模式  2.4 Hibernate API简介  2.4.1 Hibernate的核心接口  2.4.2 事件处理接口  2.4.3 ...

    JAVA面试宝典2010

    18、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? 107 19、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他...

    Java面试宝典-经典

    18、一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决? 107 19、一个用户具有多个角色,请查询出该表中具有该用户的所有角色的其他...

Global site tag (gtag.js) - Google Analytics