repeaterc#分页用法的效率及简单优化(不使用存储过程)

repeaterc#分页用法的效率及简单优化(不使用存储过程)

ID:34725528

大小:48.70 KB

页数:3页

时间:2019-03-10

repeaterc#分页用法的效率及简单优化(不使用存储过程)_第1页
repeaterc#分页用法的效率及简单优化(不使用存储过程)_第2页
repeaterc#分页用法的效率及简单优化(不使用存储过程)_第3页
资源描述:

《repeaterc#分页用法的效率及简单优化(不使用存储过程)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、三层架构:1、DAL:封装了SELECT*FROMtable事务(1)。2、BLL:用GetAll()方法封装了对DAL的事务(1)的访问,并返回一个List。3、View:通过Repeater遍历出来。其中:objPage.DataSource=ds.Tables["testTable"].DefaultView;修改为:objPage.DataSource=tableBLL.GetAll();测试的结果表示,在Controller(*.aspx.cs)中按上一篇文中的方法定义,空

2、间并不会自动帮你填充Limit条件(如TOPN等),而是不加修改的原封不动地调用你的封装好的方法,原封不动地执行(SELECT*FROMtable)获取表的所有数据,就是说,Repeater只会对你返回的结果进行截断处理,就是从数据库中查询所有记录,抽取N条显示在表现层。毋庸置疑,这个效率是很低的。当数据海量时,可以想象这样一次查询的数据量传输占用了多少带宽,还有你的服务器内存。当你看懂了《[asp.net2.0]RepeaterC#分页用法》,其实对这个进行简单的优化也就不难了。只要把GetAll

3、()修改为GetAll(intFrom,intTo),相应改变里面的逻辑便可。具体的分页逻辑,建议用一个PageUtil的辅助类单独封装起来。关于SQL2005分页查询,从网上截取到一下内容,请参考:http://www.blogjava.net/mlh123caoer/archive/2006/06/10/51819.htmlMicrosoftSQLServer2005查询分页微软新的SQLServer2005新增了数据库分页功能,以后再也用写复杂不灵活而低效率的分页存储过程。新的数据库分页功能的

4、核心是一个叫row_number的函数具体如下:返回结果集分区内行的序列号,每个分区的第一行从1开始。语法ROW_NUMBER()     OVER([])备注ORDERBY子句可确定在特定分区中为行分配唯一ROW_NUMBER的顺序。参数将FROM子句生成的结果集划入应用了ROW_NUMBER函数的分区。确定将ROW_NUMBER值分配给分区中的行

5、的顺序。有关详细信息,请参阅ORDERBY子句(Transact-SQL)。有关详细信息,请参阅OVER子句(Transact-SQL)。返回类型bigint示例以下示例将根据年初至今的销售额,返回AdventureWorks中销售人员的ROW_NUMBER。复制代码USEAdventureWorksGOSELECTc.FirstName,c.LastName,ROW_NUMBER()OVER(ORDERBYSalesYTDDESC)AS'RowNumber',s.SalesYTD,a.Postal

6、CodeFROMSales.SalesPersonsJOINPerson.Contactcons.SalesPersonID=c.ContactIDJOINPerson.AddressaONa.AddressID=c.ContactIDWHERETerritoryIDISNOTNULLANDSalesYTD<>0以下示例将返回行号为50到60(含)的行,并以OrderDate排序。复制代码USEAdventureWorks;GOWITHOrderedOrdersAS(SELECTSalesOrder

7、ID,OrderDate,ROW_NUMBER()OVER(orderbyOrderDate)asRowNumberFROMSales.SalesOrderHeader)SELECT*FROMOrderedOrdersWHERERowNumberbetween50and60;==============================进过我对百万行数据记录的分页测试,效率比以前网上能够找到的最好的存储过程(个人意见)稍高。但是还是比同样的Oralce的分页效率低。最后我总结一下,如果想查找按ID排的

8、10~20行的记录,可以这么写:SELECT*FROM(SELECTROW_NUMBER()OVER(orderbyID)ASrowNum,*FROMtable)ASaWHEREa.rowNum>=10ANDa.rowNum<=20

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

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

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