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

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同

    临近春节,心早已飞了不在工作上了,下面小编给大家整理些数据库的几种分页查询。

    Sql Sever 2005之前版本:

    select top 页大小 *
    from 表名
    where id not in
    (
    select top 页大小*(查询第几页-1) id from 表名 order by id
    )
    order by id 

    例如:

    select top 10 * --10 为页大小
    from [TCCLine].[dbo].[CLine_CommonImage]
    where id not in
    (
    --40是这么计算出来的:10*(5-1)
    -- 页大小*(查询第几页-1)
    select top 40 id from [TCCLine].[dbo].[CLine_CommonImage] order by id
    )
    order by id

    结果为:

    Sql Sever 2005及以上版本,多了个分页查询方法:

    /*
    * firstIndex:起始索引
    * pageSize:每页显示的数量
    * orderColumn:排序的字段名
    * SQL:可以是简单的单表查询语句,也可以是复杂的多表联合查询语句
    */
    select top pageSize o.* from (select row_number() over(order by orderColumn) as rownumber,* from(SQL) as o where rownumber>firstIndex; 

    例如:

    select top 10 numComImg.* from 
    ( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg)
    as numComImg where rownumber>40 

    结果:

    这两个方法,就仅仅是多了一列 rewnumber 吗?当然不是,来看下内部差别吧:

    在两个SQL上,分别加入以下SQL,并使用MS的“包括执行计划”,便于查看执行详情:

    SET STATISTICS TIME ON
    GO 

    要执行的SQL:

    SET STATISTICS TIME ON
    GO
    select top 10 numComImg.* from 
    ( select row_number() over(order by id asc) as rownumber,* from (select * FROM [TCCLine].[dbo].[CLine_CommonImage]) as comImg)
    as numComImg where rownumber>40
    SET STATISTICS TIME ON
    GO
    select top 10 * --10 为页大小
    from [TCCLine].[dbo].[CLine_CommonImage]
    where id not in
    (
    --40是这么计算出来的:10*(5-1)
    -- 页大小*(查询第几页-1)
    select top 40 id from [TCCLine].[dbo].[CLine_CommonImage] order by id
    )
    order by id 

    执行之后,查看执行计划:

    看得出,两个同样功能的SQL,执行时,使用 row_number() 的,要比是用 纯TOP方式的,查询开销少得多,上图显示 28:72,纯top方式,使用了两次聚集扫描。

    再来看下执行时间信息:

    row_number()方式的:


    纯top方式:


    相比之下,还是row_number()解析函数效率比较高写。

    以上所述是小编给大家分享的SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同,希望对大家有所帮助。

    您可能感兴趣的文章:
    • SqlServer2000+ 身份证合法校验函数的示例代码
    • Sqlserver 自定义函数 Function使用介绍
    • SQLServer行列互转实现思路(聚合函数)
    • SQLServer中Partition By及row_number 函数使用详解
    • SQLServer中merge函数用法详解
    • sqlserver四舍五入使用round函数及cast和convert函数
    • 谈谈sqlserver自定义函数与存储过程的区别
    • SQLServer之常用函数总结详解
    上一篇:SQL中print、sp_helptext的限制与扩展
    下一篇:SQL Server中NULL的正确使用与空间占用
  • 相关文章
  • 

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

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

    SQLSERVER分页查询关于使用Top方式和row_number()解析函数的不同 SQLSERVER,分页,查询,关于,