SqlSever大数据分页
Published on 2014-09-25 23:14 in 暂未分类 with 无涯Ⅱ

SqlSever大数据分页

    在sql sever中大数据的分页一直是难以处理的一块,利用id自增列分页也存在不足之处。从一个相对全面的分页看,sql sever2005中新增的row_number()函数解决了这个问题。还是从一个实际项目开始介绍吧。中国铁建股份公司的项目表中数据很大,开发之初用的是GridView控件自带的分页,在运行一年以后,点击下一页终于是难以等待了,系统需要优化。对于分页的改进是业务的需要。于是,我采用了Row_number()函数分页。也算一解了燃眉之急。

    说明:该篇文章只是一个案例的说明,更详细的理论请查看随笔《大数据分页实现与性能优化》

    提高分页效率主要有:
    (1)充分利用外键,以提高表连接速度
    (2)尽可能使用自然链接,尽量避免使用外连接
    (3)尽可能将记录少的表放在连接的左边,以减少先处理的记录数
    (4)尽可能先选择,后连接,以减少处理的数据量
    (5)有可能的时候建立视图,充分使用数据库自身的优化功能

    以下为分页查询的sql语句:

    select * from
    (select t_gcxm_test.sgdw,t_gcxm_test.id,xmmc,t_gcxm_test.gclb as gclb,gchte,gchte - kl2 as xmsyjzl,
    kl2 as klsl,dwmc,lry ,Row_number() over(order by t_gcxm_test.id desc) as IDRank
    from t_dw,t_gcxm_test where t_dw.dwid=t_gcxm_test.sgdw  and (sgdw like'gf12%' and ((sgdw <>'gf12' and fgcid is  null)or(sgdw ='gf12' )) or  lry =  'gf12gao'))
    as b
    where IDRank>=50023 and IDRank<50033

    其中的IDRank的值可通过web网页,传递过来。把分页的sql语句写在存储过程中,可以充分展现分页的效果。

    图一 单表分页耗时

    图二 多表分页耗时

    posted @   无涯Ⅱ  阅读(1244)  评论(0编辑  收藏  举报
    编辑推荐:
    · 如何编写易于单元测试的代码
    · 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
    · .NET Core 中如何实现缓存的预热?
    · 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
    · AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
    阅读排行:
    · 周边上新:园子的第一款马克杯温暖上架
    · Open-Sora 2.0 重磅开源!
    · 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
    · Ollama——大语言模型本地部署的极速利器
    · DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
    点击右上角即可分享
    微信分享提示