`
tomgooityeeee
  • 浏览: 73901 次
文章分类
社区版块
存档分类
最新评论
阅读更多

    <span style="font-size: small">我们以前在开发大数据量的分页存储过程时,往往都为了怎么样实现高效的性能,而大伤脑筋,似乎总是想写出最佳的存储过程分页方法,我们假如建立一个学生基本信息表StudentInfo,我们看在Sql Server 2000中我们实现的存储过程: <br /> <br />CREATE&nbsp; PROCEDURE p_GetStudentInfo <br />@strWhere&nbsp;&nbsp; varchar(1500)&nbsp;&nbsp; -- 查询条件 (注意: 不要加 where) <br />,@PageSize&nbsp;&nbsp;&nbsp; int = 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 页尺寸 <br />,@PageIndex&nbsp;&nbsp; int = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 页码 <br />AS <br />BEGIN <br /> <br />declare @strSQL&nbsp;&nbsp; varchar(5000)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 主语句 <br />declare @strTmp&nbsp;&nbsp; varchar(110)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 临时变量 <br />declare @strOrder varchar(400)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- 排序类型 <br /> <br />set @strTmp = '&lt;(select min' <br />set @strOrder = ' order by studentinfoid desc' <br /> <br />if @PageIndex = 1 <br />begin <br />&nbsp;&nbsp;&nbsp;&nbsp; if @strWhere != ''&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp; set @strSQL = 'select top ' + str(@PageSize) +' *&nbsp; from studentinfo where ' + @strWhere + ' ' + @strOrder <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set @strSQL = 'select top ' + str(@PageSize) +'&nbsp; *&nbsp;&nbsp; from studentinfo '+ @strOrder <br />--如果是第一页就执行以上代码,这样会加快执行速度 <br />end <br />else <br />begin <br />--以下代码赋予了@strSQL以真正执行的SQL代码 <br />set @strSQL = 'select top ' + str(@PageSize) +'&nbsp; *&nbsp; from studentinfo <br />where studentinfoid' + @strTmp + '(studentinfoid) from (select top ' + str((@PageIndex-1)*@PageSize) + ' studentinfoid from studentinfo' + @strOrder + ') as tblTmp)'+ @strOrder <br />if @strWhere != '' <br />&nbsp;&nbsp;&nbsp;&nbsp; set @strSQL = 'select top ' + str(@PageSize) +'&nbsp; * from studentinfo <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where studentinfoid' + @strTmp + '(studentinfoid) from <br />&nbsp;&nbsp;&nbsp; (select top ' + str((@PageIndex-1)*@PageSize) + ' studentinfoid from studentinfo where ' + @strWhere + ' ' <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder <br />end <br />--print (@strSQL) <br />exec (@strSQL) <br />END <br />GO <br />&nbsp; 我们在上面的存储过程中可以看到,如果执行的是第一页的记录时,我们可以看到只执行 <br /> <br />'select top ' + str(@PageSize) +' * from studentinfo where ' + @strWhere + ' ' + @strOrder <br />&nbsp; 就可以了,而如果翻页的时候,就会在条件查询中又嵌套子查询,势必性能会有所下降,而这个已经在我们Sql Server2000中算是高效的分页存储过程实现方式了,而现在如果我们换作Sql Server 2005的时候,我们是不是还是用这种方式呢? <br /> <br />&nbsp; 在Sql Server 2005中,我们可以利用新增函数row_number()来更高效的实现分页存储 <br /> <br />CREATE PROCEDURE p_GetStudentInfo <br />  @PageSize INT, <br />  @PageIndex INT, <br />  @strWhere varchar(1500) -- 查询条件(注意: 不要加where) <br />  As <br />  Begin <br />  select * from ( <br />  select row_number() over (order by StudentInfoId) row,* from StudentInfo ) StudentInfo <br />  where row between @PageSize*(@PageIndex-1) and @PageSize*@PageIndex <br />  End <br />  go <br />&nbsp; 依照群组显示每条记录在该群组中出现的顺序位置,在显示每条记录编号时非常有用,并且搭配OVER子句,这样就可以实现查询记录的条数了。 <br /> <br />  我们现在来比较一下它们执行的性能,StudentInfo表中现在有30多万条数据,我们分别来执行下面的存储过程: <br /> <br />  Exec p_GetStudentInfo <br />  @PageSize = 10000, <br />  @PageIndex = 10, <br />  @strWhere = '1=1' <br /> <br /> <br />&nbsp; 在Sql Server 2000中,执行的时间是接近2秒; <br /> <br />&nbsp; 在Sql Server 2005中,执行的时间显示的是接近0秒。 <br /> <br />&nbsp; 如果数据涉及到千万级的数据时,比较上面两种方法,就可以看到一些显著的差别了</span>
 
分享到:
评论

相关推荐

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

    根据给定的SQL Server存储过程...总之,SQL Server的`GROUP BY`分组查询、存储过程和分页技术都是数据库管理和数据分析中不可或缺的工具。正确理解和灵活运用这些技术,可以极大地提升数据库应用程序的性能和用户体验。

    Microsoft SQL Server 2005技术内幕:存储引擎(中文).pdf

    本书对SQL Server 2005存储引擎方面的知识进行了全面而详细的阐述,包括数据库文件、日志和恢复、表、索引及其管理、锁定和并发等内容。除了解释设计理念与运作原理外,书中还辅之以大量简短而有力的实例。您将跟随...

    sql server分页技术(SQL Server 与Access数据库相关分页技术)

    以下是几种常用的SQL Server分页技术: 1. **TOP 和 NOT IN** 分页: 这种方法通过`TOP`关键字选取指定数量的记录,然后使用`NOT IN`子句排除已选取的记录。例如,查询第二页的记录,可以先选取前`@RecordStart`个...

    java 连接sqlserver数据库查询,并分页显示

    在实际应用中,可以结合前端技术(如JavaScript、Vue.js、React等)动态加载分页数据。 总结来说,Java连接SQL Server数据库并执行查询涉及以下步骤: 1. 引入JDBC驱动 2. 创建数据库连接 3. 编写SQL查询语句,支持...

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

    ### 最简单的SQL Server数据库存储过程分页 #### 知识点概述 在处理大量数据时,分页查询是一项常见的需求。传统的T-SQL分页方法可能会导致...希望本文能帮助读者更好地理解和应用SQL Server中的存储过程分页技术。

    《Microsoft SQL Server 2005技术内幕:T-SQL查询》示例代码

    《Microsoft SQL Server 2005技术内幕:T-SQL查询》是一本深入解析SQL Server 2005中T-SQL查询语言的专业书籍。T-SQL(Transact-SQL)是微软对标准SQL的扩展,是SQL Server的核心组件,用于数据库管理、数据查询和...

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

    总的来说,利用SQL Server的存储过程进行千万级数据分页查询,结合合理的索引策略和优化技巧,能够有效提升查询性能,降低系统负载,为用户提供流畅的浏览体验。请参考“分页.txt”和“使用方法.txt”文件,了解更多...

    sqlserver海量数据TOP分页

    本文将深入探讨如何使用SQL Server中的`TOP`语句来实现高效的数据分页,同时结合JDBC和Servlet技术进行数据的后台处理和前端展示。 首先,`TOP`语句是SQL Server中的一个非常实用的子句,用于在查询结果集中返回...

    jsp+sql server分页技术

    **JSP + SQL Server 分页...总之,JSP结合SQL Server的分页技术是解决大数据展示问题的有效方法,合理运用可以显著提升Web应用的性能和用户体验。理解其原理并熟练掌握,对于任何Java Web开发者来说都是必备技能之一。

    struts+hibernate+sql server2005分页的小项目

    **Struts、Hibernate和SQL Server 2005 分页小项目详解** 在软件开发中,尤其是Web应用,数据分页是一项重要的功能,它能够帮助用户有效地浏览大量数据,提高用户体验。本项目以"Struts+Hibernate+SQL Server 2005...

    Sqlserver2005数据库级别异步分页

    虽然这里讨论的是SQL Server 2005,但类似的异步分页技术也适用于其他数据库系统,如MySQL、Oracle等,只是具体实现可能有所不同。 综上所述,数据库级别的异步分页结合了SQL Server的存储过程和JavaScript的前端...

    SQL Server代码实例分页效果

    总结来说,SQL Server提供了多种分页技术,包括`TOP`与`ORDER BY`,`ROW_NUMBER()`窗口函数,以及`OFFSET`和`FETCH NEXT`。在代码后台,可以编写通用的方法来封装这些查询,方便在各种场景下使用。合理地利用索引和...

    SqlServer数据库分页

    在SQL Server数据库中,分页是一种常见的数据检索技术,它允许我们从大量数据中按需获取一部分结果,而不是一次性加载所有记录。这在处理大型数据集时尤其有用,可以提高性能,减少网络传输,以及提供更好的用户体验...

    jsp+sqlserver分页

    总结,"jsp+sqlserver分页"项目涉及了数据库分页技术、Struts框架的使用、JavaBean组件以及JSP页面的构建。这些知识点对于理解Web开发中的数据交互和用户界面设计至关重要。通过这个项目,开发者可以学习到如何在...

    SQL Server 2005内存调优

    ### SQL Server 2005 内存调优关键技术解析 #### 一、引言 在数据库管理系统(DBMS)的运维过程中,SQL Server 2005 的性能优化是确保系统稳定运行的关键之一。其中,内存管理尤其重要,因为它直接影响到数据查询...

    SQLServer分页.rar

    在SQL Server数据库管理中,分页查询是一种常用的技术,它允许用户按页面浏览大量数据,而不是一..."SQL分页.txt"文档应该会详细介绍这些内容,包括示例代码和最佳实践,对于理解和应用SQL Server分页技术非常有帮助。

    SQL server 分页查询

    ### SQL Server分页查询概述 分页查询是指从大量数据中按需取出一部分数据的过程,通常用于网页展示或大型数据报表中,以提高加载速度和减少服务器负担。在SQL Server中,实现分页查询有多种方法,包括使用`ROW_...

    ASP.NET基于SQLServer的分页

    综上,ASP.NET结合SQL Server的分页技术是构建高效数据展示的重要手段。开发者需要理解分页原理,掌握如何在ASP.NET中使用分页控件,以及如何优化SQL Server的分页查询,以提供流畅的用户体验。在实际项目中,根据...

    SqlServer2005 DAO Servlet 分页 图片放大效果的购物车

    【SqlServer2005】:SQL Server 2005是微软公司推出的一款关系型数据库管理系统,它在数据存储、处理和管理方面提供了强大的功能。该版本引入了新的T-SQL扩展,支持更复杂的查询和数据操作,同时提高了性能和稳定性...

Global site tag (gtag.js) - Google Analytics