`

几种分页查询的实现与比较

阅读更多
几种分页查询的实现与比较:个人比较推荐第5种方式,性能比较稳定,语法结构简单

    --【00】初始化数据(执行几分钟就可以产生几百万数据)Person表结构:ID(int 自增列),Name(nvarchar(50)),Age(int)
    WHILE 1 = 1
    BEGIN
     INSERT INTO dbo.Person (Name,Age) VALUES (NEWID(),Round(Rand()*100,1))
    END
    SELECT * FROM dbo.Person

    --【01】200万数据情况下,测试时用了7秒:临时表的方法
    DECLARE @StartRow INT
    DECLARE @EndRow INT
    SET @StartRow = 100
    SET @EndRow = 110
    SET ROWCOUNT 0
    DECLARE @TempTable TABLE
    (
        ID int IDENTITY PRIMARY KEY,
        PK int
    )

    INSERT INTO @TempTable SELECT ID FROM dbo.Person ORDER BY Name

    SELECT A.* FROM Person AS A JOIN @TempTable AS B ON A.ID = B.PK WHERE B.ID >= @StartRow AND B.ID < @EndRow

    --【02】200万数据情况下,测试时用了4秒:影响行数方法
    DECLARE @StartRow INT
    DECLARE @PageSize INT
    SET @StartRow = 100
    SET @PageSize = 10

    DECLARE @Sort NVARCHAR(50)--与ORDER BY的列类型一致
    SET ROWCOUNT @StartRow

    SELECT @Sort = Name FROM Person ORDER BY Name
    SET ROWCOUNT @PageSize

    SELECT * FROM Person WHERE Name >= @Sort ORDER BY Name

    --【03】200万数据情况下,测试时用了0秒:子查询的方法
    DECLARE @StartRow INT
    DECLARE @PageSize INT
    SET ROWCOUNT 0
    --SET @StartRow = 100(TOP关键字不能使用变量)
    --SET @PageSize = 10(TOP关键字不能使用变量)
    SELECT * FROM Person WHERE ID IN
    (
     SELECT TOP 10 ID FROM Person WHERE ID NOT IN(SELECT TOP 100 ID FROM Person ORDER BY Name)
        ORDER BY Name
    )
    ORDER BY Name


    --【04】200万数据情况下,测试时用了5秒:游标的方法
    DECLARE @StartRow INT
    DECLARE @PageSize INT
    SET @StartRow = 100
    SET @PageSize = 10
    SET ROWCOUNT 0

    DECLARE @ID INT
    DECLARE @TempTable TABLE (ID INT NOT NULL PRIMARY KEY)

    DECLARE PagingCursor CURSOR DYNAMIC READ_ONLY FOR
    SELECT ID FROM Person ORDER BY Name

    OPEN PagingCursor

    FETCH RELATIVE @StartRow FROM PagingCursor INTO @ID

    WHILE @PageSize > 0 AND @@FETCH_STATUS = 0
    BEGIN
        INSERT INTO @TempTable(ID) VALUES(@ID)
        FETCH NEXT FROM PagingCursor INTO @ID
        SET @PageSize = @PageSize - 1
    END

    CLOSE PagingCursor
    DEALLOCATE PagingCursor

    SELECT A.* FROM Person AS A JOIN @TempTable AS B ON A.ID = B.ID ORDER BY Name

    --【05】200万数据情况下,测试时用了1秒:行号函数的方法(只有SQL Server 2005以上版本支持)
    DECLARE @StartRow INT
    DECLARE @PageSize INT
    SET ROWCOUNT 0
    SET @StartRow = 100
    SET @PageSize = 10

 SELECT * FROM
 (
  SELECT ROW_NUMBER() OVER (ORDER BY Name) AS RowNumber,* FROM Person
 ) AS A WHERE A.RowNumber BETWEEN @StartRow + 1 AND @StartRow + @PageSize 
分享到:
评论

相关推荐

    hbase分页查询实现[归类].pdf

    HBase分页查询实现 HBase是一种基于分布式的NoSQL数据库,它提供了高效的数据存储和检索能力。然而,HBase本身不支持分页查询,这使得开发者需要自己实现分页功能。本文将讲解如何使用Java语言实现HBase的分页查询...

    oracle认证详解Oracle的几种分页查询语句

    ### Oracle认证详解:Oracle的几种分页查询语句 #### 分页查询背景及重要性 在数据库管理系统(DBMS)中,特别是在Oracle这样的大型关系型数据库中,分页查询是一种非常实用的技术。它允许用户根据需求获取特定...

    常见的几种分页语句和方法

    ### 常见的几种分页语句和方法 在软件开发中,特别是Web应用程序中,数据分页是一项非常重要的技术。它可以帮助我们更高效地处理大量数据,并提高用户体验。本文将详细介绍几种常用的分页方法,包括SQL语句分页、...

    servlet实现分页查询

    在分页查询中,我们通常需要以下几个步骤: 1. **请求处理**:当用户点击页面链接或提交表单时,Servlet捕获HTTP请求,通常包含页码和每页显示条数等参数。 2. **计算页数**:Servlet根据数据库中的总记录数和每页...

    oracle分页查询sql

    #### 四、基于ROWNUM的分页查询的两种方式比较 对于上述分页查询,有两种不同的实现方式: 1. **方式一**:通过内外两层`WHERE`子句分别控制每页的最大值和最小值。 ```sql SELECT * FROM ( SELECT A.*, ROWNUM ...

    SSH实现分页实例

    如果你的项目中同时包含了MyBatis,那么分页实现方式可能会有所不同。MyBatis允许我们在Mapper XML文件中编写SQL语句,通过设置参数来实现分页。例如,可以使用limit和offset关键字或者rownum伪列(根据数据库类型)...

    java多线程分页查询

    #### 二、Java多线程分页查询原理及实现 ##### 1. 分页查询基础概念 分页查询是指在查询数据时,将数据分成多个页面展示,而不是一次性返回所有数据。这种方式能够有效地减少单次查询的数据量,从而提高查询速度和...

    用Hibernate实现分页查询.docx

    分页查询是一种在数据量较大的情况下,为了提高用户体验和系统性能而采取的一种技术手段。它将查询结果分成若干页显示,用户可以通过翻页操作查看不同的数据集。 在进行分页查询时,通常需要指定两个重要的参数:`...

    达梦数据库的基本操作以及分页查询等

    根据java语言对达梦DM数据库的连接和操作,包括建表、新增、修改、删除、查询以及复杂查询和分页查询等完整代码,附送Dm7Dictionary的驱动包,此驱动包兼容jdk1.7和jdk1.8本人亲测完美兼容

    ssh的例子实现了分页的查询

    总结一下,SSH框架下实现分页查询主要涉及以下几个步骤: 1. 在Action类中定义分页参数,并编写获取数据的方法。 2. 使用Spring依赖注入管理DAO对象,注入到Action中。 3. 在DAO实现类中使用Hibernate执行分页查询。...

    sql分页查询几种写法

    以下将详细介绍几种常见的SQL分页查询方法。 1. **Not In / Top 方法** 这种方法通过`NOT IN`子查询配合`TOP`来实现分页。首先,获取需要排除的前n条记录,然后在主查询中排除这些记录,从而得到分页后的结果。...

    大数据量多线程执行分页查询

    在实际应用中,实现大数据量多线程分页查询的过程可能包括以下几个步骤: 1. **设计数据库表结构**:根据需求创建合适的表结构,合理利用索引以优化查询性能。 2. **实现分页查询**:使用SQL的`LIMIT`(MySQL)或`...

    几种数据库的数据分页

    本文将详细介绍MySQL、SQL Server、Oracle以及DB2四种主流数据库中的分页实现方法。 #### MySQL 分页 在MySQL中,`LIMIT`关键字是实现数据分页的主要手段。其基本语法格式如下: ```sql SELECT * FROM 表名 LIMIT...

    java实现的一个分页程序

    在这个"java实现的一个分页程序"中,我们可以探讨几个关键知识点: 1. **JDBC分页**:Java中的分页通常通过Java Database Connectivity (JDBC) API来实现。使用PreparedStatement和Statement对象,我们可以在SQL...

    ACCESS数据库大数据量分页的几种方法比较及测试结果分析

    ACCESS 数据库大数据量分页的几种方法比较及测试结果分析 本文解决的问题:1.ACCESS 是否存在更有效率的分页方法?2.现有 ACCESS 大数据量 10 万条数据分页的效率测试3.ACCESS 的数据承载量到底有多大? ACCESS ...

    C#后台分页及数据库脚本常用的几种分页写法

    ### C#后台分页及数据库脚本常用的几种分页写法 #### 分页技术概述 在Web开发中,为了提高用户体验以及服务器性能,通常会采用分页技术来展示大量数据。分页技术不仅可以减少单次请求的数据量,降低服务器压力,还...

    struts2.0实现的数据分页实现及实现分页步骤

    Struts2.0 是一个流行的Java Web开发框架,它提供了一种组织和控制MVC(Model-...同时,随着技术的发展,现代的Web应用可能更倾向于使用ORM框架(如Hibernate)和前端分页库(如jQuery DataTables)来简化分页实现。

    datalist分页技术及实现

    在实现Datalist分页的过程中,主要涉及以下几个关键步骤: 1. 数据获取:首先,需要从服务器端获取全部或部分数据。这通常通过API接口完成,可以使用AJAX异步请求,或者在后端处理时直接分页返回。 2. 分页参数:...

    几种数据库常见分页sql

    本文将详细介绍在SQL Server、Oracle以及MySQL这三种常用数据库中实现分页查询的方法。 ### SQL Server 分页查询 #### 方法一:使用 `TOP` 关键字 SQL Server 提供了 `TOP` 关键字来进行分页查询。这种方式比较...

Global site tag (gtag.js) - Google Analytics