晨想

纯技术、纯兴趣

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

        项目中要使用分页的地方很多,园子里面也有很多各种分页方法的性能测试。但是如何既能满足快速开发的要求,又能保证良好的性能这是需要值得权衡的事情。经过几天的测试,我觉得比较好的方法是通用存储过程+ajax分页,为什么呢。且看以下分析。

       使用通用存储过程,大大的节约了开发时间,一般情况下的分页,涉及的查询无非是单表多表查询,按条件排排序之类的,所以有个通用存储过程可以省很多力气。特殊的再使用专用的存储过程来解决。网上的这种通用SP比较多,我自己改了一个,这个SP经过长期使用,没有什么问题。里面优化了首页、尾页的算法,查询时经测试,前后翻页速度在1900W级别时也能基本保持一致。

 存储过程如下

Code

 一般的,我们需要一个total来显示在页面,如果直接在sp里面执行,效率在小表里面看不出来,如果在百W级别、千W级别里面,性能差距是相当明显,下面这个SP是自带total返回的,

Code

 如果你的分页控件需要后台绑定total,则用第二个SP,但这里,我真的向你推荐使用第一种不带TOTAL返回的,最佳做法是在页面前台,使用一个ajax异步查询total,然后绑定到ajax的分页上。这样性能将是最佳的。

在1900w级的测试中,ajax分页和后台绑定total的性能测试中, 其首次加载页面的性能体验差距基本上是10倍计。

 

因此,分页的快速开发最佳做法是通用sp+ajax分页,至于数据绑定,泛型还是dataset,我的建议是能用泛型的时候还是泛型,不是因为性能好,而是因为从后翻页泛型的效率和首页加载的性能基本一致。而dataset效率慢了4.5倍左右。 数据可以绑定到gridview,也可以仍然使用ajax传递,看你项目需要了,这个不是必须的。

 

 需要说明的是,目前这个sp还不支持group by,多字段排序也不支持,如果你有这个需要,需要改一改了。

 

 

 

posted on 2009-11-22 13:47  超晨  阅读(1967)  评论(21编辑  收藏  举报