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

分页

本文的三种分页方案来自于:

只是做了更大数据量、不同位置页的对比。

建立表:

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万条、无索引、字符串内容的各种测试,记得告诉我一下结果。

时间: 2024-09-17 04:40:14

三种分页方式效率的简单测试的相关文章

sqlserver 三种分页方式性能比较[图文]_MsSql

Liwu_Items表,CreateTime列建立聚集索引 第一种,sqlserver2005特有的分页语法 复制代码 代码如下: declare @page int declare @pagesize int set @page = 2 set @pagesize = 12 SET STATISTICS IO on SELECT a.* FROM ( SELECT ROW_NUMBER() OVER (ORDER BY b.CreateTime DESC) AS [ROW_NUMBER], b

sqlserver三种分页方式性能比较

Liwu_Items表,CreateTime列建立聚集索引 第一种,sqlserver2005特有的分页语法 declare @page intdeclare @pagesize intset @page = 2set @pagesize = 12 SET STATISTICS IO onSELECT a.* FROM (SELECT ROW_NUMBER() OVER (ORDER BY b.CreateTime DESC) AS [ROW_NUMBER], b.* FROM [dbo].[L

SQL Server 存储过程三种分页效率测试对比

很多朋友对大数据库分页技术感兴趣,在 SQL Server 优先会考虑存储过程,本人也是用存储过程分布,而且是本实例中的第二方案,下面我们来用实例对比 利用Not In和SELECT TOP分页,利用ID大于多少和SELECT TOP分页,利用SQL的游标存储过程分页 这三种分页技术的效率. 建立表: CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLL

PHP遍历数组的三种方法及效率对比分析_php技巧

本文实例分析了PHP遍历数组的三种方法及效率对比.分享给大家供大家参考.具体分析如下: 今天有个朋友问我一个问题php遍历数组的方法,告诉她了几个.顺便写个文章总结下,如果总结不全还请朋友们指出 第一.foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. <?php $urls= array('aaa','bbb','ccc','ddd'); foreach ($urls as $url){ echo "This Site url is $url! <b

PHP遍历数组的三种方法及效率对比分析

 这篇文章主要介绍了PHP遍历数组的三种方法及效率对比,实例分析了foreach.while与for三种遍历数组的方法与相关的效率比对,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例分析了PHP遍历数组的三种方法及效率对比.分享给大家供大家参考.具体分析如下: 今天有个朋友问我一个问题php遍历数组的方法,告诉她了几个.顺便写个文章总结下,如果总结不全还请朋友们指出 第一.foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. ? 1 2 3 4 5 6

sqlserver的3种分页方式

  sqlserver的3种分页方式,如下: 01 ---sqlServer 2005 分页语句集合 02 ----缺点: 03 -- top:必须用户编写复杂sql,不支持复合主键 04 -- max:必须用户编写复杂sql,不支持非唯一列排序 05 --row:不支持sqlserver2000 06 -------------------------------- 07 select TOP @pagesize id,email,qq,wechart,phone,phone1 FROM co

无线路由器的三种加密方式

  无线路由器主要提供了三种无线安全类型:WPA-PSK/WPA2-PSK.WPA/WPA2 以及WEP.不同的安全类型下,安全设置项不同. 1. WPA-PSK/WPA2-PSK WPA-PSK/WPA2-PSK安全类型其实是WPA/WPA2的一种简化版本,它是基于共享密钥的WPA模式,安全性很高,设置也比较简单,适合普通家庭用户和小型企业使用.其具体设置项见下图所示: 认证类型: 该项用来选择系统采用的安全模式,即自动.WPA-PSK.WPA2-PSK. 自动:若选择该项,路由器会根据主机请

Linq to Sql : 三种事务处理方式

原文:Linq to Sql : 三种事务处理方式     Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from  MSDN: 事务 (LINQ to SQL)).MSDN中描述得相对比较粗狂,下面就结合实例来对此进行阐述. 0. 测试环境 OS Windows Server 2008 Enterprise + sp1 IDE Visual Studio 2008, .net framework 3.5 + SP1 DB SQL Server 2000

IIS下PHP的三种配置方式对比_php技巧

在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异.   1.CGI(通用网关接口/Common Gateway Interface)一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求.这样,当用户请求数量非常多时,会大量占用系统的资源,如内存.CPU时间等,造成效能低下.   2.ISAPI(