SqlServer 多种分页方式 详解(含简单速度测试)

 更新时间:2022年12月16日 09:21:58   作者:沐光之成  
这篇文章主要介绍了SqlServer 多种分页方式 (含简单速度测试),附带50万数据分页时间[本机访问|已重启SQL服务|无其他程序干扰][非索引排序],需要的朋友可以参考下

SQLServer分页方式

附带50万数据分页时间[本机访问|已重启SQL服务|无其他程序干扰][非索引排序]
环境 WIN7 SQL服务12.04 SQL管理器SSMS14.01

1.Offset and Fetch 方式分页

[SqlServer2012+] OFFSET 起始值 ROWS FETCH NEXT 每页条数 ROWS ONLY

1.分页条件不能重复,建议使用 分页条件+主键 一起作为 分页参数
2.分页语句中 FIRST=NEXT ROWS=ROW
3.不使用排序可以用 order by (select 1)

使用 OFFSET FETCH 方式分页必须带order by key 其中key 必须是唯一值 不然会导致错误

select * from (
select * from sysrizhi 
 ) table_temp order by riqi desc,sysrizhiid desc offset 10 rows fetch next 10 rows only

50万行执行时间 770毫秒 索引排序10毫秒

select * from tcpliushui order by riqi OFFSET 100 ROWS FETCH NEXT 20 ROWS ONLY

2.row_number() 方式分页

[SqlServer2005+] row_number()over(order by 已有排序字段)rownumber 然后根据rownumber筛选

使用方式

select * from (select *, ROW_NUMBER() Over( order by  riqi desc,sysrizhiid desc ) as rowNum from (
select * from sysrizhi 
  ) as table_1  ) as t where t.rowNum>10 and t.rowNum<=20

速度测试 50万行执行时间 774毫秒 索引排序10毫秒

select * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui )a
where rownumber>100 and rownumber<121

速度测试 50万行执行时间 777毫秒 索引排序13毫秒

select top 20 * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui)a
where rownumber>100

速度测试 50万行执行时间 775毫秒 索引排序15毫秒

select * from
(select row_number()over(order by riqi)rownumber,* from tcpliushui)a
where rownumber between 101 and 120

3.row_number()变种

不基于已有字段 [SqlServer2005+]

速度测试 50万行执行时间 779毫秒 索引排序15毫秒

select *
from (
 select row_number()over(order by tempColumn)rownumber,*
 from (select top 120 tempColumn=0,* from tcpliushui where 1=1 order by riqi)a
)b
where rownumber>100

4.not in/top方式分页

速度测试 50万行执行时间 858毫秒 索引排序51毫秒

select top 20 * from tcpliushui
where tcpliushuiid not in (select top 100 tcpliushuiid from tcpliushui order by riqi)
order by riqi

5.not exists方式分页

速度测试 50万行执行时间 852毫秒 索引排序22毫秒

select top 20 * from tcpliushui
where not exists
(select 1 from (select top 100 tcpliushuiid from tcpliushui order by riqi)a where a.tcpliushuiid=tcpliushui.tcpliushuiid)
order by riqi

6.max/top方式分页

速度测试 50万行执行时间 819毫秒 索引排序12毫秒

select top 20 * from tcpliushui
where tcpliushuiid>(select max(tcpliushuiid) from (select top 100 tcpliushuiid from tcpliushui order by riqi)a)
order by riqi 

到此这篇关于SqlServer 多种分页方式 (含简单速度测试)的文章就介绍到这了,更多相关SqlServer 分页方式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL Server 2012 安全概述

    SQL Server 2012 安全概述

    这篇文章给你概括介绍了SQL Server 2012里的基本安全概念。你学到了一些常见的数据威胁,探寻了SQL Server背后的设计理念,学习了在整个系列文章看到的一些安全术语,算是一篇比较非公式化的开篇,希望能够勾引起大家对于sql安全的兴趣
    2016-04-04
  • SQL实现模糊查询的四种方法小结

    SQL实现模糊查询的四种方法小结

    在SQL中,模糊查询是一种通过匹配字符串中的一部分或关键字来查询数据的方法,本文主要介绍了SQL实现模糊查询的四种方法小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 使用正则表达式匹配tsql注释语句

    使用正则表达式匹配tsql注释语句

    我相信接触过SQL Server数据库的很多朋友都知道,它是以"--"开头来进行注释的,下面的方法是使用正则表达式匹配tsql注释语句的方法,大家参考使用吧
    2014-02-02
  • 详解sql中exists和in的语法与区别

    详解sql中exists和in的语法与区别

    这篇文章主要介绍了sql中exists和in的语法与区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Navicat连接SQL Server数据库的详细指南

    Navicat连接SQL Server数据库的详细指南

    Navicat是一款功能强大的数据库管理工具,支持连接和管理SQLServer数据库,本文详细介绍了如何使用Navicat连接到SQLServer,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • SQL Server数据库之表的高级查询

    SQL Server数据库之表的高级查询

    这篇文章主要给大家介绍了关于SQL Server数据库之表的高级查询的相关资料,高级查询在数据库中用得是最频繁的,也是应用最广泛的,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • SQL Server数据库的三种创建方法汇总

    SQL Server数据库的三种创建方法汇总

    新建数据库是我们开始数据库学习的重要一步,下面这篇文章主要给大家介绍了关于SQL Server数据库的三种创建方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • SQLServer导出sql文件/表架构和数据操作步骤

    SQLServer导出sql文件/表架构和数据操作步骤

    只导出了数据库的sql脚本,而表里的数据依然没有导出来,接下来将为你解决这个问题,感兴趣的看下教程哈
    2013-03-03
  • SQLMAP插件tamper模块简介

    SQLMAP插件tamper模块简介

    这篇文章主要介绍了SQLMAP插件tamper模块介绍,在SQLMAP中,有很多tamper插件,常用的tamper插件及其作用本文给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • MSSQL存储过程的功能和用法详解

    MSSQL存储过程的功能和用法详解

    Microsoft SQL Server(MSSQL)是一个关系型数据库管理系统,它支持各种数据操作和查询功能,其中,存储过程是MSSQL中非常重要的一个功能,在这个章节中,我们将详细介绍MSSQL存储过程的功能和用法
    2023-12-12

最新评论