• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

海量数据高性能分页新方法

数据库技术 开心 2428次浏览 0个评论

海量数据高性能分页新方法

最近,一直在进行项目性能的优化工作,从中也有一些心得体会,拙见仅供大家参考,欢迎探讨交流!

    对于数据库分页的做法,从网上的资料综合来看,大体分为三类:

    1。根据ID分页

    2。使用Top分页

    3。利用Not In分页

    这三种方法中,速度最快的是第一种,第二种其次,第三种是最慢的。第一种方法虽然最快,但是,在实际的应用中,其实并不多。因为,基本上没有页面会根据ID来排序,通常都是根据某(几)个有意义的字段来排序。第二种方法是我平常用的最多的,Top的效率还是不错的。第三种方法,由于会引起全表扫描,所以,一般不怎么推荐使用。在这里,第二和第三种方法都有一个缺点,就是随着页数的增多,越是靠后的数据,获取越慢。

    所以,我在思考,有没有一种比Top更快的方法呢?现知的就只有按照ID分页了,但是,我的数据中没有ID字段,那么我可以做一个变通,把要排序的(一个或多个)字段组合成一个相当于ID功效的东西来看待,然后,对这个组合字段排序。我的表达可能不是很清楚,那么我们举个例子吧。

    现有一表:工厂物料表,数据量60万

    TblOrgItem

    (

        OID nvarchar(40),–自动产生的GRID

        OrgCode nvarchar(50),–工厂代码

        OrgName nvarchar(50),–工厂名称

        ItemNo nvarchar(50),–物料编码

        ItemName nvarchar(50),–物料名称

        ……

    )

    需求:按照先”工厂代码”升序,再”物料编码”升序的顺序排序显示

    那么这个时候我们可以把”工厂代码”+”物料编码”的组合看作是一个主键,然后对它进行分页。在这里,我们需要这么几个参数:

    传入参数:

    @PageSize int,

    @PageIndex int,

    @LastOrgCode nvarchar(50),–上一页最后一条记录的工厂代码

    @LastItemNo nvarchar(50),–上一页最后一条记录的物料编码

    组合起来的分页SQL应该就是这样的了,我直接写了,实际执行的时候要拼凑成字符串动态执行:

    select top @PagaSize OrgCode,OrgName,ItemNo,ItemName from TblOrgItem

                where OrgCode>=@LastOrgCode and ItemNo>@LastItemNo –如果是第一页,可以不用这一行

                Order by OrgCode,ItemNo

    注:对于组合字段大于2个及2个以上的,Where 条件的写法是:前面的字段都是用”>=”判断,只有最后一个字段使用”>”判断。

    这个分页SQL执行的效率应该比较接近用ID进行分页的效率了,如果,再在这个表的OrgCode,ItemNo字段上加上聚集索引的话,分页的效果又会更上一层楼了!


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明海量数据高性能分页新方法
喜欢 (0)

您必须 登录 才能发表评论!

加载中……