NET中实现大结果集分页研讨时间

NET中实现大结果集分页研讨时间

ID:37861218

大小:50.50 KB

页数:8页

时间:2019-06-01

NET中实现大结果集分页研讨时间_第1页
NET中实现大结果集分页研讨时间_第2页
NET中实现大结果集分页研讨时间_第3页
NET中实现大结果集分页研讨时间_第4页
NET中实现大结果集分页研讨时间_第5页
资源描述:

《NET中实现大结果集分页研讨时间》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ASP.NET中实现大结果集分页研讨时间:2009-01-0409:16:02来源:http://eud.codepub.com作者:未知点击:629次  在Web应用程序中,对一个大数据库结果集进行分页已经是一个家喻户晓的问题了。简单的说,你不希望所有的查询数据显示在一个单独的页面中,所以带有分页的显示才是更合适的。虽然在传统的asp里这并不是一个简单的任务,但在asp.net中,DataGrid控件把这一过程简化为只有几行代码。因此,在asp.net中,分页很简单,但是默认的DataGrid分页事件会从数据库中把所有的记录全部读出来放到asp.netweb应用程序中。当你的数

2、据在一百万以上的时候,这将引起严重的性能问题(如果你不相信,你可以在你的应用程序中执行一个查询,然后在任务管理器中查看aspnet_wp.exe的内存消耗情况)这也就是为什么需要自定义分页行为,这样可以保证仅获得当前页需要的数据记录。  在网上有很多关于这个问题的文章和帖子,还有一些成熟的解决方案。我写这篇文章的目的不是向你展示一个可以解决一切问题的存储过程,而是出于优化已有方法,同时为你提供一个可供测试的应用程序,这样你就可以根据自己的需要进行开发。  但是我对目前网上介绍的方法不是很满意。第一,使用了传统的ADO,很明显它们是为“古老”的asp而写的。剩下的一些方法就是SQL

3、Server存储过程,并且其中的一些由于相应时间过慢而无法使用,正如你在文章最后所看到的性能结果一样,但是还是有一些引起了我的注意。  通用化  我要对对目前常用的三个方法进行仔细的分析,它们是临时表(TempTable),动态SQL(DynamicSQL)和行计数(Rowcount)。在下文中,我更愿意把第二个方法称为(升序-降序)Asc-Desc方法。我不认为动态SQL是一个好名字,因为你也可以把动态SQL逻辑应用于另一个方法中。所有这些存储过程的通病在于,你不得不估计哪些列是你即将要排序的,而不仅仅是估计主键列(PKColumns)而已,这可能导致一系列的问题——对于每个查

4、询来说,你需要通过分页显示,也就是说对于每不同的排序列你必须有许多不同的分页查询,这意味着你要么给每个排序列做不同的存储过程(无论使用哪种分页方法),也么你必须借助动态SQL的帮助把这个功能放在一个存储过程中。这两个方法对于性能有微小的影响,但是它增加了可维护性,特别是当你需要使用这个方法显示不同的查询。因此,在本文中我会尝试使用动态SQL对所有的存储过程进行归纳,但是由于一些原因,我们只能对实现部分的通用性,因此你还是得为复杂查询写独立的存储过程。  允许包括主键列在内的所有排序字段的第二个问题在于,如果那些列没有作适当的索引,那么这些方法一个也帮不上忙。在所有这些方法中,对于

5、一个分页源必须先做排序,对于大数据表来说,使用非索引列排序的成本是可以忽略不计的。在这种情况下,由于相应时间过长,所有的存储过程都是无法在实际情况下使用的。(相应的时间各有不同,从几秒钟到几分钟不等,这要根据表的大小和所要获得的第一个记录而定)。其他列的索引会带来额外的不希望出现的性能问题,例如如果你每天的导入数据很多,它有可能变得很慢。  临时表  首先,我准备先来说一下临时表方法,这是一个广泛被建议使用的解决方案,我在项目中遇到过好几次了。下面让我们来看看这个方法的实质:CREATETABLE#Temp( IDintIDENTITYPRIMARYKEY, PK/*herego

6、esPKtype*/)INSERTINTO#TempSELECTPKFROMTableORDERBYSortColumnSELECTFROMTableJOIN#TemptempONTable.PK=temp.PKORDERBYtemp.IDWHEREID>@StartRowANDID<@EndRow  通过把所有的行拷贝到临时表中,我们可以对查询进一步的优化(SELECTTOPEndRow…),但是关键在于最坏情况——一个包含100万记录的表就会产生一个100万条记录的临时表。考虑到这样的情况,再看看上面文章的结果,我决定在我的测试中放弃该方法  升序-降序  这个方法在子查询中

7、使用默认排序,在主查询中使用反向排序,原理是这样的:DECLARE@tempTABLE( PK/*PKType*/ NOTNULLPRIMARY)INSERTINTO@tempSELECTTOP@PageSizePKFROM( SELECTTOP(@StartRow+@PageSize) PK, SortColumn/*IfsortingcolumnisdefferentfromthePK,SortColumnmust befetchedaswell,otherwisejustt

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。