现在的位置: 首页 > 综合 > 正文

也谈分页存储过程的问题,堪称史上最强分页存储过程!

2013年07月10日 ⁄ 综合 ⁄ 共 1649字 ⁄ 字号 评论关闭

    看到了园子里很多同志们探讨分页取数据的问题,有的是纯粹的存储过程,有的是拼凑sql字符串,各说各的好,暂且不论,有一种新的方式暂时没有看到大家发布,今天发布出来,欢迎拍砖一起进步!

    一、很久以前:

            很久以前,我们使用标准的分页存储过程,无论任何分页控件几乎采用一致的分页存储过程,比如我们的网站生活网http://www.shenghuo.cn)采用的就是吴旗娃的分页控件,标准的存储过程如下:

                   

Code

 

            如上所述,首先构建临时表,计算起始条数和结束条数。然后量表联合搜索我们需要的数据,在一个41716条数据的环境测试下的时间为00:00:05。可见数据如果为百万级的话我们就会为这个东东等待多久!

       二、现在的东东

            有了sql2005后,微软为我们引入了一种全新的表达式,那就是CTE(公用表表达式),可是用with temp as的方式将数据临时取出,然后select这个temp,结合over函数将使我们分页取数据得到质的提升,

                   说明:

                        1、over 相当于聚合函数,只能出现在select阶段和orderby 阶段

                        2、由于with还有其他作用,所以在使用with之前,with之上的sql语句一定要使用“,”结束,虽然sql2005不强制我们使用“,”结束语句,但是这是一个好习惯

            废话少说来看新的存储过程

                  

Code

 

                  看到了吗?代码简单明了,我们使用了select * 和老得存储过程的select po_id,iid_nbr做比较,结果这个新的存储过程取出10条的时间是:00:00:00,几乎不需要时间,这就是差距,也是sql2005带给我们的极大的便利,非常的简单易用,用到了sql2005的一个新特性而已,却解决了我们很大的问题,如果大家还有新的更好的方式欢迎拍砖!

                  

抱歉!评论已关闭.