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

三种分页方式效率的简单测试

    博客分类:
  • DAO
阅读更多

三种分页方式效率的简单测试

Posted on 2004-10-02 13:17 squirrel_sc 阅读(10009) 评论(15) 编辑 收藏 所属分类: others 

本文的三种分页方案来自于:
http://blog.csdn.net/lihonggen0/archive/2004/09/14/103511.aspx
只是做了更大数据量、不同位置页的对比。

建立表:

CREATE TABLE [TestTable] (
 
[ID] [int] IDENTITY (11NOT NULL ,
 
[FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 
[LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
 
[Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 
[Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL 
ON [PRIMARY]
GO

 

插入数据:(100万条)

SET IDENTITY_INSERT TestTable ON
declare @i int
set @i=1
while @i<=1000000
begin
    
insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX')
    
set @i=@i+1
end
SET IDENTITY_INSERT TestTable OFF


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

分页方案一:(利用Not In和SELECT TOP分页)
语句形式:

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


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

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

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


测试结果:
测试均为每页10条,三个数字依次为三种方案出结果需要的时间,单位为秒:
第2页:18,10,29
第500页:12,8,21
第50000页:16,18,22
第500000页:24,16,22
    这次测试的主要目的是对大数据量不同部分的翻页效率的测试。本以为应该是一个线性的结果,结果发现变化很奇怪。多测试几次结果误差在1、2秒之内,估计sql server对于翻页也是根据不同位置有优化的。看了查询分析,主要的花销还是order by,这还是主键的,如果不是主键,或者是字符串,估计更慢。
    因为还有别的事情要忙,也没有做进一步的测试,有兴趣的朋友可以继续做做10万条、无索引、字符串内容的各种测试,记得告诉我一下结果。

分享到:
评论

相关推荐

    SSH框架三种分页方式 演示实例

    为了更好地理解这三种分页方式,你可以创建一个简单的SSH项目,模拟一个用户管理模块。首先,定义User实体类和对应的DAO、Service层。然后,根据上述代码实现分页查询,并在不同的场景下(如使用HQL、原生SQL或...

    对Oracle数据库三种分页方法的测试与研究.pdf

    在进行分页效率比较时,通常需要考虑数据量、查询复杂度以及数据库性能等因素。对于大量数据,ROW_NUMBER()可能因为需要对整个结果集进行排序而消耗更多资源,而ROWNUM在某些情况下可能更为高效,尤其是当不需要全局...

    c# Datagridview 分页控件以及测试程序

    "C# Datagridview 分页控件以及测试程序"是一个帮助开发者实现DataGridView分页功能的示例,通过自定义控件和测试程序,开发者可以学习到如何在C#环境中为DataGridView添加分页,提升大数据量展示的效率和用户体验。...

    asp高效分页 效率很高

    在ASP(Active Server Pages)开发中,分页是常见的网页数据展示方式,尤其在处理大量数据时,分页能够显著提升用户体验,同时减轻服务器负担。本文将深入探讨如何实现一个高效的ASP分页类,并结合提供的50W数据测试...

    SQL Server数据库三种分页方案详尽分析

    本文将详细分析三种分页方法,并探讨它们的优缺点。 首先,我们创建一个名为`TestTable`的测试表,包含`ID`(主键,自动递增),`FirstName`,`LastName`,`Country`和`Note`字段。然后,我们插入2万条数据以进行测试...

    一种高效的ASP+ACCESS分页方法

    ### 一种高效的ASP+ACCESS分页方法 #### 知识点概述 在Web开发中,尤其是在使用ASP(Active Server Pages)结合ACCESS数据库进行网站构建的过程中,分页技术是非常重要的一个环节。传统的分页方法虽然简单易懂,但...

    MVC分页 使用 教程与源代码

    `GridViewExtensions`是另一种实现分页的方式,它扩展了`System.Web.Mvc.Html`命名空间,提供了对`GridView`的分页支持。不过,这个类在MVC中并不常见,更多地被用在ASP.NET Web Forms中。 **5. 数据库脚本和源代码...

    简单PHP分页类的实现(内含测试数据库及数据库操作类)

    这个压缩包提供的"简单PHP分页类的实现"是一个实用工具,可以帮助开发者轻松地在网页上实现数据的分页显示。下面将详细介绍分页类的工作原理、如何使用以及相关数据库操作。 首先,PHP分页类的核心功能是计算总页数...

    简单分页实现

    在IT行业中,分页是一种常见的数据展示方式,尤其在网页应用中,用于处理大量数据时,提高用户体验。这里我们讨论的“简单分页实现”涵盖了基础架构、相关jar包和DBUtil工具类的使用,这些都是实现分页功能的重要...

    简单的分页

    这里的“简单的分页”示例是利用Linq技术实现的一种高效、易读的分页解决方案,适合初学者理解和掌握。Linq(Language Integrated Query,语言集成查询)是C#的一个重要特性,它允许开发者以一种更自然、更接近SQL的...

    大数量分页

    在处理大数据集时,提高分页效率是优化用户体验和服务器资源利用的关键。本文将详细探讨两种分页策略——默认分页和自定义分页,并侧重于后者在大数据量场景下的应用,特别是如何利用SQL Server 2005的新特性来实现...

    ssm整合+分页简单框架

    在SSM框架中,实现分页通常有两种方式: 1. **自定义分页**: 开发者需要编写SQL查询,手动计算总页数,然后在Java代码中处理分页逻辑。这需要对数据库操作有深入理解,但灵活性较高。 2. **使用第三方库**,如...

    一个不错的分页组件,很简单

    通过阅读和研究这些文件,开发者可以快速理解和部署这个分页组件,从而提升开发效率,减少手动编写分页逻辑的时间和错误。同时,一个优秀的分页组件还应该考虑到SEO优化,确保爬虫能够正确抓取和理解分页结构。总的...

    二十五大数据量时提高分页的效率.docx

    在处理大数据量时,提高分页效率是优化数据库性能的关键环节。默认的分页方式,如GridView控件的内置分页,虽然简单易用,但其性能问题在于每次加载都会检索全部数据,这对于大规模数据集而言是低效的。因此,我们...

    Sql server 分页存储过程的性能对比

    在"分页存储过程效率对比.doc"文档中,可能详细分析了每种方法的执行计划、资源消耗、响应时间等指标,通过实验数据来展示不同方法在实际应用中的性能差异。对比这些数据可以帮助我们理解在特定数据库结构和工作负载...

    超级封装的.tag标签分页、超级简化jsp内的分页代码、eclipse源码

    本资源提供了一种高效且简洁的分页解决方案,利用.tag标签技术来封装分页逻辑,使得在JSP页面中的实现变得简单易懂。 首先,我们来详细了解一下`.tag`标签。`.tag`文件是JSP标准标签库(JSTL)的一部分,用于创建...

    c#分页方案

    本文将基于给定的文件信息,深入探讨C#中三种.NET分页方案的细节,包括它们的工作原理、优缺点以及适用场景。 ### 分页方案一:利用NotIn和SELECT TOP分页 此方案主要通过排除前几页的数据来获取指定页面的数据。...

    dwr框架实现无刷新分页

    6. **测试与优化**:运行项目,测试分页功能是否正常,根据实际需求进行性能优化。 **四、MyDwrPage文件解析** 在提供的文件"**MyDwrPage**"中,可能包含以下内容: - HTML模板,用于展示分页界面和数据区域。 - ...

    java分页神器,内附案例文件

    Java 分页神器是一款高效、易用的分页插件,专为Java后端开发人员设计,旨在简化数据库查询中的分页处理,提高开发效率。它提供了便捷的API接口,使得在项目中实现复杂的分页逻辑变得轻而易举。这款神器通常与ORM...

Global site tag (gtag.js) - Google Analytics