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 (1, 1) NOT 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项目,模拟一个用户管理模块。首先,定义User实体类和对应的DAO、Service层。然后,根据上述代码实现分页查询,并在不同的场景下(如使用HQL、原生SQL或...
在进行分页效率比较时,通常需要考虑数据量、查询复杂度以及数据库性能等因素。对于大量数据,ROW_NUMBER()可能因为需要对整个结果集进行排序而消耗更多资源,而ROWNUM在某些情况下可能更为高效,尤其是当不需要全局...
"C# Datagridview 分页控件以及测试程序"是一个帮助开发者实现DataGridView分页功能的示例,通过自定义控件和测试程序,开发者可以学习到如何在C#环境中为DataGridView添加分页,提升大数据量展示的效率和用户体验。...
在ASP(Active Server Pages)开发中,分页是常见的网页数据展示方式,尤其在处理大量数据时,分页能够显著提升用户体验,同时减轻服务器负担。本文将深入探讨如何实现一个高效的ASP分页类,并结合提供的50W数据测试...
本文将详细分析三种分页方法,并探讨它们的优缺点。 首先,我们创建一个名为`TestTable`的测试表,包含`ID`(主键,自动递增),`FirstName`,`LastName`,`Country`和`Note`字段。然后,我们插入2万条数据以进行测试...
### 一种高效的ASP+ACCESS分页方法 #### 知识点概述 在Web开发中,尤其是在使用ASP(Active Server Pages)结合ACCESS数据库进行网站构建的过程中,分页技术是非常重要的一个环节。传统的分页方法虽然简单易懂,但...
`GridViewExtensions`是另一种实现分页的方式,它扩展了`System.Web.Mvc.Html`命名空间,提供了对`GridView`的分页支持。不过,这个类在MVC中并不常见,更多地被用在ASP.NET Web Forms中。 **5. 数据库脚本和源代码...
这个压缩包提供的"简单PHP分页类的实现"是一个实用工具,可以帮助开发者轻松地在网页上实现数据的分页显示。下面将详细介绍分页类的工作原理、如何使用以及相关数据库操作。 首先,PHP分页类的核心功能是计算总页数...
在IT行业中,分页是一种常见的数据展示方式,尤其在网页应用中,用于处理大量数据时,提高用户体验。这里我们讨论的“简单分页实现”涵盖了基础架构、相关jar包和DBUtil工具类的使用,这些都是实现分页功能的重要...
这里的“简单的分页”示例是利用Linq技术实现的一种高效、易读的分页解决方案,适合初学者理解和掌握。Linq(Language Integrated Query,语言集成查询)是C#的一个重要特性,它允许开发者以一种更自然、更接近SQL的...
在处理大数据集时,提高分页效率是优化用户体验和服务器资源利用的关键。本文将详细探讨两种分页策略——默认分页和自定义分页,并侧重于后者在大数据量场景下的应用,特别是如何利用SQL Server 2005的新特性来实现...
在SSM框架中,实现分页通常有两种方式: 1. **自定义分页**: 开发者需要编写SQL查询,手动计算总页数,然后在Java代码中处理分页逻辑。这需要对数据库操作有深入理解,但灵活性较高。 2. **使用第三方库**,如...
通过阅读和研究这些文件,开发者可以快速理解和部署这个分页组件,从而提升开发效率,减少手动编写分页逻辑的时间和错误。同时,一个优秀的分页组件还应该考虑到SEO优化,确保爬虫能够正确抓取和理解分页结构。总的...
在处理大数据量时,提高分页效率是优化数据库性能的关键环节。默认的分页方式,如GridView控件的内置分页,虽然简单易用,但其性能问题在于每次加载都会检索全部数据,这对于大规模数据集而言是低效的。因此,我们...
在"分页存储过程效率对比.doc"文档中,可能详细分析了每种方法的执行计划、资源消耗、响应时间等指标,通过实验数据来展示不同方法在实际应用中的性能差异。对比这些数据可以帮助我们理解在特定数据库结构和工作负载...
本资源提供了一种高效且简洁的分页解决方案,利用.tag标签技术来封装分页逻辑,使得在JSP页面中的实现变得简单易懂。 首先,我们来详细了解一下`.tag`标签。`.tag`文件是JSP标准标签库(JSTL)的一部分,用于创建...
本文将基于给定的文件信息,深入探讨C#中三种.NET分页方案的细节,包括它们的工作原理、优缺点以及适用场景。 ### 分页方案一:利用NotIn和SELECT TOP分页 此方案主要通过排除前几页的数据来获取指定页面的数据。...
6. **测试与优化**:运行项目,测试分页功能是否正常,根据实际需求进行性能优化。 **四、MyDwrPage文件解析** 在提供的文件"**MyDwrPage**"中,可能包含以下内容: - HTML模板,用于展示分页界面和数据区域。 - ...
Java 分页神器是一款高效、易用的分页插件,专为Java后端开发人员设计,旨在简化数据库查询中的分页处理,提高开发效率。它提供了便捷的API接口,使得在项目中实现复杂的分页逻辑变得轻而易举。这款神器通常与ORM...