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

转SQL Server 存储过程的经典分页

阅读更多

转自:http://www.iteye.com/topic/230211

 

平台与环境:
CPU:Intel(R) Pentium(R) Dual T2390 1.86GHz
内存:1G(系统正常启动后约占300M空间)
硬盘:SATA 160G 8M Cache
系统:windowsxp+Sql Server 2005 sp2
测试数据:共100万条



分页测试代码:
1)row_number的两种分页方式:分别用top和between过滤
2)包含子查询结果的三种分页方式
共5种方式。



方式1:

每页显示200条
分页至10万条之后的第两百条记录

Java代码 复制代码
  1. PROCEDURE [dbo].[proc_select_moauser1]   
  2. AS   
  3. BEGIN   
  4.  SET NOCOUNT ON;   
  5.     declare @tdiff datetime   
  6.     set @tdiff=getdate()   
  7.     select top 200 * from(select row_number() over(order by uid asc) as rownumber,* from moa_user ) as tb where rownumber>100000  
  8.     select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'  
  9. END  
PROCEDURE [dbo].[proc_select_moauser1]
AS
BEGIN
 SET NOCOUNT ON;
    declare @tdiff datetime
    set @tdiff=getdate()
    select top 200 * from(select row_number() over(order by uid asc) as rownumber,* from moa_user ) as tb where rownumber>100000
    select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'
END


响应时间:156ms-210ms



方式2:

每页显示200条
分页至10万条之后的第两百条记录

Java代码 复制代码
  1. PROCEDURE [dbo].[proc_select_moauser2]   
  2. AS   
  3. BEGIN   
  4.  -- SET NOCOUNT ON added to prevent extra result sets from   
  5.  -- interfering with SELECT statements.   
  6.  SET NOCOUNT ON;   
  7.   
  8.     -- Insert statements for procedure here   
  9.  declare @tdiff datetime   
  10.     set @tdiff=getdate()   
  11.     select * from(select row_number() over(order by uid asc) as rownumber,* from moa_user ) as tb where rownumber between 100000 and 100200  
  12.     select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'  
  13. END  
PROCEDURE [dbo].[proc_select_moauser2]
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    -- Insert statements for procedure here
 declare @tdiff datetime
    set @tdiff=getdate()
    select * from(select row_number() over(order by uid asc) as rownumber,* from moa_user ) as tb where rownumber between 100000 and 100200
    select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'
END


响应时间:153ms-176ms



方式3

每页显示200条
分页至10万条之后的第两百条记录

Java代码 复制代码
  1. PROCEDURE [dbo].[proc_select_moauser3]   
  2. AS   
  3. BEGIN   
  4.  -- SET NOCOUNT ON added to prevent extra result sets from   
  5.  -- interfering with SELECT statements.   
  6.  SET NOCOUNT ON;   
  7.    declare @tdiff datetime   
  8.     set @tdiff=getdate()   
  9.     select top 200  * from moa_user a  where uid  not in(select top 100000  uid  from moa_user  b order by uid)   
  10.     select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'  
  11. END  
PROCEDURE [dbo].[proc_select_moauser3]
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
   declare @tdiff datetime
    set @tdiff=getdate()
    select top 200  * from moa_user a  where uid  not in(select top 100000  uid  from moa_user  b order by uid)
    select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'
END



响应时间:270ms-290ms


方式4:

每页显示200条
分页至10万条之后的第两百条记录

Java代码 复制代码
  1. PROCEDURE [dbo].[proc_select_moauser4]   
  2. AS   
  3. BEGIN   
  4.  -- SET NOCOUNT ON added to prevent extra result sets from   
  5.  -- interfering with SELECT statements.   
  6.  SET NOCOUNT ON;   
  7.     declare @tdiff datetime   
  8.     set @tdiff=getdate()   
  9.     -- Insert statements for procedure here   
  10.    select * from ( select TOP 200 * FROM ( SELECT TOP 100000 * from moa_user ORDER BY uid ASC ) as amoaUser ORDER BY uid DESC ) as bmoaUser ORDER BY uid ASC   
  11.     select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'      
  12. END  
PROCEDURE [dbo].[proc_select_moauser4]
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;
    declare @tdiff datetime
    set @tdiff=getdate()
    -- Insert statements for procedure here
   select * from ( select TOP 200 * FROM ( SELECT TOP 100000 * from moa_user ORDER BY uid ASC ) as amoaUser ORDER BY uid DESC ) as bmoaUser ORDER BY uid ASC
    select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'   
END

响应时间:950ms



方式5:
每页显示200条
分页至10万条之后的第两百条记录

Java代码 复制代码
  1. PROCEDURE [dbo].[proc_select_moauser5]   
  2.     
  3. AS   
  4. BEGIN   
  5.  -- SET NOCOUNT ON added to prevent extra result sets from   
  6.  -- interfering with SELECT statements.   
  7.  SET NOCOUNT ON;   
  8.   
  9.     -- Insert statements for procedure here   
  10.  declare @tdiff datetime   
  11.     set @tdiff=getdate()   
  12.     -- Insert statements for procedure here   
  13.    SELECT TOP 200 * FROM moa_user WHERE (uid > (SELECT MAX(uid) FROM (SELECT TOP 100000 uid FROM moa_user ORDER BY uid) AS temp_moa_user)) ORDER BY uid   
  14.     select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'      
  15. END  
PROCEDURE [dbo].[proc_select_moauser5]
 
AS
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

    -- Insert statements for procedure here
 declare @tdiff datetime
    set @tdiff=getdate()
    -- Insert statements for procedure here
   SELECT TOP 200 * FROM moa_user WHERE (uid > (SELECT MAX(uid) FROM (SELECT TOP 100000 uid FROM moa_user ORDER BY uid) AS temp_moa_user)) ORDER BY uid
    select datediff(ms,@tdiff,getdate()) as '耗时(毫秒)'   
END


响应时间:135ms

分享到:
评论

相关推荐

    sql Server 通用分页存储过程

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

    sql分页 sqlserver中存储过程分页

    ### SQL Server 存储过程实现分页查询 #### 背景介绍 在数据库操作中,分页查询是非常常见的需求之一。特别是在数据量较大的场景下,分页不仅可以提高查询效率,还能改善用户体验。SQL Server 提供了多种方式进行...

    最简单的SQL Server数据库存储过程分页

    本文介绍一种简单且高效的SQL Server存储过程实现分页的方法,这种方法仅需提供SQL语句、每页的记录数以及当前页数即可快速完成分页操作。 #### SQL Server存储过程分页原理 在SQL Server中,通过存储过程实现分页...

    sqlserver+group by分组查询分页存储过程

    根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...

    ASP+SQL Server带条件查询的分页存储过程及其ASP调用实例

    3. ASP可以用于调用SQL Server存储过程实现数据的插入、更新和查询。 4. 使用参数化的存储过程可以提高数据库的安全性和性能。 5. 使用SQL Server的存储过程可以简化数据库操作和提高开发效率。 详细知识点 知识点...

    千万级数据分页查询存储过程SQLServer

    本文将深入探讨如何利用SQL Server的存储过程实现高效的大数据分页查询。 首先,理解分页查询的基本概念。分页查询是指从海量数据中按指定的页码和每页大小获取数据,通常用于网页展示或报表生成。在SQL Server中,...

    sql server 2008通用分页

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

    SQL Server 2000下的通用分页存储过程

    SQL Server 2000下的通用分页存储过程.sql

    在VB6.0中调用SQL Server的存储过程.pdf

    在VB6.0中调用SQL Server的存储过程是VB开发者经常遇到的问题,本文将详细介绍如何在VB6.0中调用SQL Server的存储过程,并对存储过程的优点和使用方法进行了详细的解释。 首先,存储过程是一种封装方法,用于重复...

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

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

    sql的存储过程-简单分页

    很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术,很好的通过存储过程实现分页的技术

    sqlserver 分页存储过程

    SQL Server 分页存储过程是一种在数据库中实现高效数据分页查询的方法。在大型数据集的展示中,分页是必不可少的,因为它允许用户逐步浏览数据,而不是一次性加载所有记录,从而提高用户体验并减少服务器负载。以下...

    sqlserver 存储过程分页

    sqlserver 存储过程分页

    asp+sqlserver2005万能分页存储过程源码

    asp+sqlserver2005万能分页存储过程源码 sqlserver2005源码下载,很灵活的

    SQL Server 存储过程及Oracle SQL语句分页

    首先,我们来看看SQL Server中的分页存储过程。这里展示的是一个名为`usp_GetPageData`的存储过程,用于获取分页数据。这个存储过程接收三个参数:`@pageSize`(每页记录数),`@pageIndex`(当前页数),以及`@...

    标准SQLServer分页存储过程

    ### 标准SQL Server分页存储过程:深入解析与应用 在处理大量数据时,分页技术是提高数据展示效率和用户体验的关键。SQL Server提供的存储过程是实现分页功能的有效方式之一。本文将深入探讨微软C# .NET中的宠物...

    SqlServer高效万能分页存储过程

    使用系统游标分页,数据越大越能显示高效

    SqlServer 分页存储过程以及代码调用

    本文将详细介绍如何使用存储过程实现SQL Server的分页,并演示如何在代码中调用这些存储过程。 一、分页的基本原理 分页通常涉及到两个关键参数:每页大小(PageSize)和当前页码(CurrentPage)。通过这两个参数...

    sqlserver存储过程生成器

    SQL Server存储过程生成器是一种工具,它旨在帮助数据库管理员和开发人员更轻松、高效地创建和管理存储过程。存储过程是预编译的SQL代码集合,可以在SQL Server中执行,提供了一种组织和重用代码的方式,提高了应用...

    SQLSERVER存储过程分页

    "SQLSERVER存储过程分页"这个主题主要涉及如何利用存储过程来实现数据库查询结果的分页显示。在大数据量的场景下,分页查询对于提高用户体验和服务器性能至关重要。 分页查询的基本思想是限制每次从数据库中检索的...

Global site tag (gtag.js) - Google Analytics