也谈分页存储过程的问题,堪称史上最强分页存储过程!
看到了园子里很多同志们探讨分页取数据的问题,有的是纯粹的存储过程,有的是拼凑sql字符串,各说各的好,暂且不论,有一种新的方式暂时没有看到大家发布,今天发布出来,欢迎拍砖一起进步!
一、很久以前:
很久以前,我们使用标准的分页存储过程,无论任何分页控件几乎采用一致的分页存储过程,比如我们的网站生活网(http://www.shenghuo.cn)采用的就是吴旗娃的分页控件,标准的存储过程如下:
如上所述,首先构建临时表,计算起始条数和结束条数。然后量表联合搜索我们需要的数据,在一个41716条数据的环境测试下的时间为00:00:05。可见数据如果为百万级的话我们就会为这个东东等待多久!
二、现在的东东
有了sql2005后,微软为我们引入了一种全新的表达式,那就是CTE(公用表表达式),可是用with temp as的方式将数据临时取出,然后select这个temp,结合over函数将使我们分页取数据得到质的提升,
说明:
1、over 相当于聚合函数,只能出现在select阶段和orderby 阶段
2、由于with还有其他作用,所以在使用with之前,with之上的sql语句一定要使用“,”结束,虽然sql2005不强制我们使用“,”结束语句,但是这是一个好习惯
废话少说来看新的存储过程
看到了吗?代码简单明了,我们使用了select * 和老得存储过程的select po_id,iid_nbr做比较,结果这个新的存储过程取出10条的时间是:00:00:00,几乎不需要时间,这就是差距,也是sql2005带给我们的极大的便利,非常的简单易用,用到了sql2005的一个新特性而已,却解决了我们很大的问题,如果大家还有新的更好的方式欢迎拍砖!
posted on 2009-05-26 14:18 Jake.SHI 阅读(3822) 评论(59) 编辑 收藏 举报