• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQL Server 分页编号的另一种方式【推荐】

    今天看书讲T-SQL,看到了UNBOUNDED PRECEDING,就想比对下ROW_NUMBER()的运行速度。

    sql及相关的结果如下,数据库中的数据有5W+。

    ROW_NUMBER():
    SET STATISTICS TIME ON
    SELECT
      ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id
    FROM
      dbo.T_MyCourse

    运行结果

    UNBOUNDED PRECEDING
    SET STATISTICS TIME ON
    SELECT
      SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id
    FROM
      dbo.T_MyCourse

    运行结果

    通过运行之后,看到结果,使用微软官方提供的方法进行编号排序,速度明显的提高。

    不过我使用上述方法进行分页获取数据的时候结果又有点不一样。

    分页获取数据:

    ROW_NUMBER() 分页获取数据:

    SET STATISTICS TIME ON
    SELECT
      *
    FROM
      (
      SELECT
        ROW_NUMBER() OVER(ORDER BY Id DESC) rn,Id
      FROM
        dbo.T_MyCourse
      )a
    WHERE
      a.rn BETWEEN 55 AND 444

     

    执行sql命令:DBCC DROPCLEANBUFFERS ,清除数据库缓存后的结果

    UNBOUNDED分页获取数据:

    SET STATISTICS TIME ON
    SELECT
      *
    FROM
      (
      SELECT
        SUM(1) OVER(ORDER BY Id DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) rn,Id
      FROM
        dbo.T_MyCourse
      )a
    WHERE
      a.rn BETWEEN 22 AND 444

     

    UNBOUNDED这个方式下执行了DBCC DROPCLEANBUFFERS 清除缓存的sql也没有用,执行时间没有变化。

     通过上述结果,看到ROW_NUMBER()获取分页的数据明显更快,我猜测是微软对ROW_NUMBER()这个方法做了优化,可能是有缓存,读取的缓存中的数据然后进行分页。

    总结

    以上所述是小编给大家介绍的SQL Server 分页编号的另一种方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

    您可能感兴趣的文章:
    • SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增删改查分页)
    • SQL Server使用row_number分页的实现方法
    • SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同
    • 五种SQL Server分页存储过程的方法及性能比较
    • SQL Server 分页查询通用存储过程(只做分页查询用)
    上一篇:MyBatis SQL xml处理小于号与大于号正确的格式
    下一篇:SQL删除多列语句的写法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    SQL Server 分页编号的另一种方式【推荐】 SQL,Server,分页,编,号的,另一种,