`
icarusliu
  • 浏览: 238180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql三种分页方式

    博客分类:
  • web
SQL 
阅读更多

表中主键必须为标识列,[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的游标存储过程分页)    效率最差,但是最为通用

分享到:
评论

相关推荐

    ataReader分页与SQL三种分页方式

    本主题将深入探讨`IDataReader`分页以及SQL中的三种分页方式:基于ROW_NUMBER()的分页、基于LIMIT/OFFSET的分页(在MySQL中常见)和基于游标的分页。 首先,我们来看`IDataReader`分页。`IDataReader`是.NET ...

    sql Server 通用分页存储过程

    sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程 sql Server 通用分页存储过程

    关于SQL Server SQL语句查询分页数据的解决方案

    关于SQL Server SQL语句查询分页数据的解决方案 在日常工作中,我们经常需要处理大量数据,并从中获取特定页面的数据。特别是在Web应用开发中,为了提高用户体验,通常会将数据进行分页显示。针对这一需求,本文将...

    Oracle 3种分页SQL方法比较

    本文将详细探讨三种常用的Oracle分页SQL方法:ROWNUM、ROWNUM结合子查询以及新引入的Oracle 12c的FETCH NEXT WITH OFFSET语法。这三种方法各有优缺点,适用于不同的场景。 1. ROWNUM方法: ROWNUM是Oracle中最基础...

    SQL 三种 分页 语句

    以上介绍了四种不同的SQL分页查询方法。每种方法都有其特点,在实际应用中应根据具体情况选择最适合的方案。对于小到中等规模的数据集,方法四可能是最简便的选择;而对于大规模数据集,则应考虑使用方法二或方法三...

    sql server 2008通用分页

    SQL server2008中通用分页存储过程,表名,每页长度,页码都是动态赋值。

    asp分页(普通sql查询分页+sql存储过程分页)

    这是我整理的,两种不同方式的分页方法,之前我做过测试的,如果数据量很大的话,然后对数据速度要求比较快的话,还是用sql存储过程分页比较好

    mybatis中进行sqlserver分页

    mybatis中,sqlserver分页

    三种数据库SQL分页方法详解

    ### 三种数据库SQL分页方法详解 在数据库查询过程中,分页是非常常见且重要的一个功能。它可以帮助我们更高效地处理大量数据,特别是在构建大型应用系统时,分页技术能够显著提升用户体验。本文将详细介绍三种...

    用SQL实现分页的三种方法

    ### 用SQL实现分页的三种方法 在数据库管理中,分页是一项常见的需求,尤其在处理大量数据时,能够有效地提升用户体验并减轻服务器负担。本文将详细介绍如何使用SQL实现分页功能,并针对三种不同的分页策略进行深入...

    LINQ To SQL实现分页效果源码

    在VS2008中,LINQ to SQL提供了直观的方式来映射数据库模式到.NET类,从而简化了数据访问。 分页是数据库查询中常见的需求,特别是在处理大量数据时,为了提高用户体验,我们需要一次加载少量数据。在LINQ to SQL中...

    在SQL Server中通过SQL语句实现分页查询

    通过对上述三种分页方案的分析可以看出,在实际应用中应根据具体情况选择合适的分页策略。如果表中有递增的唯一标识符(如ID),那么推荐使用方案二,因为它在大多数情况下提供更好的性能。若没有这样的唯一标识符,...

    sql语句写分页通用代码

    在三层结构的分页设计中,通常包括以下三个层次: 1. **参数层**:接收前端传来的分页参数,如当前页码和每页行数。 2. **逻辑层**:根据参数构建SQL语句。这里可以创建一个函数或者方法,接受表名、查询条件等作为...

    三种数据库利用SQL语句进行高效果分页

    本文将详细介绍如何在三种不同的数据库系统(SQL Server、Access、Oracle)中实现高效的SQL分页查询。 #### SQL Server 分页查询 SQL Server 支持 `TOP` 关键字,这使得在 SQL Server 中实现分页变得相对简单。...

    SQL Server2005分页查询

    每种方法都有其优缺点,需要根据实际的数据库规模、查询性能要求以及数据排序方式来选择最适合的方法。在处理大数据集时,优化查询性能是非常重要的,可能需要结合索引策略和其他数据库设计原则来进一步提升查询速度...

    常用数据库sql分页

    数据库SQL分页技术 数据库分页是指从大规模的数据集中提取指定的记录数,以减少数据传输量,提高应用程序的性能和用户体验。常见的数据库管理系统包括MySQL、SQL Server、Oracle、DB2等,每种数据库管理系统都有其...

    Hibernate+sqlserver2000分页

    SQL Server 2000不支持像后来版本的`OFFSET`和`FETCH NEXT`分页语法,但可以通过其他方式实现。常用的方法是使用`ROW_NUMBER()`函数配合子查询或`TOP`关键字。例如: ```sql SELECT * FROM ( SELECT ROW_...

    aspnetpager控件与三层sql语句的分页

    aspnetpager控件是由第三方开发的,如SuperWebUI或DevExpress等,它提供了一种方便的方式来在网页上显示分页链接,允许用户按需加载每一页的数据。这个控件通常具备自定义样式、事件处理和多种分页模式等功能。 ...

    Sql Server 通用分页存储过程(适用与 BootStrap Table)

    通用的Sql Server分页程序,并且符合BootStrap Table 的调用标准.

Global site tag (gtag.js) - Google Analytics