SQL Server 大数据量分页

2023-12-19

1、ROW_NUMBER() OVER()方式(SQL2012以下推荐使用)

SELECT
*
FROM
( SELECT ROW_NUMBER ( ) OVER ( ORDER BY menuId ) AS RowId,* FROM sys_menu ) AS r
WHERE
RowId BETWEEN 1 AND 10

用子查询新增一列行号(ROW_NUMBER)RowId查询,比较高效的查询方式,只有在SQL Server2005或更高版本才支持。

“BETWEEN 1 AND 10” 是指查询第1到第10条数据(闭区间),在这里面需要注意的是OVER的括号里面可以写多个排序字段。

通用用法:

--pageIndex 表示指定页
--pageSize  表示每页显示的条数


SELECT
*
FROM
( SELECT ROW_NUMBER ( ) OVER ( ORDER BY 排序字段 ) AS RowId,* FROM 表名 ) AS r
WHERE
RowId BETWEEN ( ( pageIndex - 1 ) * pageSize + 1 )
AND ( pageIndex * PageSize )

2、offset fetch next方式(SQL2012及以上的版本才支持:推荐使用 )

--offset fetch next方式查询,最高效的查询方式,只有在SQL Server2012或更高版本才支持

SELECT
*
FROM
sys_menu
ORDER BY
menuId offset 0 ROWS FETCH NEXT 10 ROWS ONLY

offset 是跳过多少行, next是取接下来的多少行, 句式 offset...rows fetch next ..rows only ,注意rows和末尾的only 不要写漏掉了,并且这种方式必须要接着Order by XX 使用,不然会报错。

举例:

SELECT
*
FROM
table1 a
WHERE
1=1 and a.id = '1'
ORDER BY
a.create_time DESC offset 102080 ROWS FETCH NEXT 30 ROWS ONLY

通用用法:

--pageIndex 表示指定页
--pageSize  表示每页显示的条数
SELECT
*
FROM
表名
ORDER BY
排序字段 offset ( ( pageIndex - 1 ) * pageSize ) ROWS FETCH NEXT pageSize ROWS ONLY

3、top not in方式 (不推荐)

--查询第11-20条记录


SELECT TOP
10 menuId, *
FROM
sys_menu
WHERE
menuId NOT IN ( SELECT TOP 10 menuId FROM sys_menu )

这条语句的原理是先查询1-10条记录的ID,然后再查询ID不属于这1-10条记录的ID,并且只需要10条记录,因为每页大小就是10,这就是获取到的第11-20条记录,这是非常简单的一种写法。

另外IN语句与NOT IN语句类似,这是NOT IN的写法,但是这种写法数据量大的话效率太低。
通用用法:

--pageIndex 表示指定页
--pageSize  表示每页显示的条数


SELECT TOP
pageSize menuId, *
FROM
sys_menu
WHERE
menuId NOT IN ( SELECT TOP ( ( pageSize - 1 ) * pageIndex ) menuId FROM sys_menu )

4、通过升序与降序方式进行查询分页(不推荐)

--查询第11-20条记录


SELECT * FROM(
SELECT TOP 10 * FROM(
SELECT TOP 20 * FROM sys_menu ORDER BY menuId ASC)
AS TEMP1 ORDER BY menuId DESC)
AS TEMP2 ORDER BY menuId ASC

这条语句首先查询前20条记录,然后在倒序查询前10条记录(即倒数10条记录),这个时候就已经获取到了11-20条记录,但是他们的顺序是倒序,所以最后又进行升序排序。

通用用法:

--pageIndex 表示指定页
--pageSize  表示每页显示的条数
SELECT * FROM(
SELECT TOP pageSize * FROM(
SELECT TOP ((pageIndex - 1) * pageSize +(pageSize*2)) * FROM sys_menu ORDER BY menuId ASC)
AS TEMP1 ORDER BY menuId DESC)
AS TEMP2 ORDER BY menuId ASC

5、采用MAX(ID)或者MIN(ID)函数(不推荐)

--查询第11-20条记录
SELECT TOP 10 * FROM sys_menu WHERE menuId>
(SELECT MAX(menuId) FROM(SELECT TOP 10 menuId FROM sys_menu ORDER BY menuId) AS TEMP1) --(第10条的id)

先把第10条记录的id找出来(当然这里面是直接使用MAX()进行查找,MIN()函数的用法也是类似的),然后再对比取比第10条记录的id大的前10条记录即为我们需要的结果。这里要注意开始时的边界值调整。

通用用法:

--pageIndex 表示指定页
--pageSize  表示每页显示的条数
SELECT TOP pageSize * FROM sys_menu WHERE menuId>
(SELECT MAX(menuId) FROM(SELECT TOP ((PageIndex-1)*PageSize) menuId FROM sys_menu ORDER BY menuId) AS TEMP1) --(第10条的id)

方案1、2、5都需要依赖一个排序Id(这个Id要么是个排序列,要么是个主键)。方案3、4则效率太低,完全不推荐。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 大数据量分页 的相关文章

  • 如何在事务中使用链接服务器插入远程表?

    我的链接服务器设置正确 我能够执行以下查询 插入 远程服务器 表 SELECT FROM 本地服务器 表 然而当我做同样的事情时交易内 开始传输 插入 远程服务器 表 SELECT FROM 本地服务器 表 提交交易 我收到类似的错误 用于
  • 计算包含字母/数字的行数

    我想要实现的目标很简单 但是解释起来有点困难 我不知道在 postgres 中这是否真的可能 我处于相当基础的水平 SELECT FROM WHERE LEFT JOIN ON HAVING 等等基本的东西 我正在尝试计算包含特定字母 数字
  • 如何使用 dql 从数据表中获取唯一值?

    我有一个表 其中有一列存储了各种值 我想使用 dql 从该表中检索唯一值 Doctrine Query create gt select rec school gt from Records rec gt where rec city ci
  • 如何根据条件删除结果以计算平均值

    我有下面的架构 对其的快速解释是 鲍勃评分为 5 5 詹姆斯评分 1 5 梅西百货评分高达 5 5 逻辑 如果我是 A 请查找我屏蔽的所有人 查阅所有电影评论 任何留下电影评论且 personA 已屏蔽的人 请将其从计算中删除 计算电影的平
  • 在 MySQL 中执行触发器需要什么权限?

    我发现 MySQL 手册中对 DEFINER 的解释令人困惑 因此我不确定运行应用程序的 执行用户 需要什么权限 为了安全起见 我喜欢将 执行用户 限制为所需的最少权限 我知道触发器 存储过程的创建者需要超级权限 但是 执行用户 是否也需要
  • 如何获取knex / mysql中所有更新记录的列表

    这是我正在处理的查询 return knex table returning id where boolean false andWhere fooID foo id update boolean true limit num then f
  • 我应该定义索引(A)和索引(B),还是索引(A,B),或者两者都定义?

    在我的表中 我有两个密切相关的列 A 和 B 我应该考虑哪些因素来决定是否创建 索引 A 和索引 B 索引 A B 以上两者 如果我 仅使用类似的查询where A 5 and B 10 并且从不喜欢where A 5 也可以使用类似的查询
  • 在 azure Devops 管道中部署 SQL 时遇到错误

    我在 azure Devops 的发布管道中使用 sql DACPAC 类型的部署 但出现以下错误 我对 SQL 不了解 有什么建议吗 Publishing to database database name on server Serve
  • SQL Server中的列级与表级约束?

    A 列级 GO CREATE TABLE Products ProductID INT CONSTRAINT pk products pid PRIMARY KEY ProductName VARCHAR 25 GO b 表层 CREATE
  • 我应该如何审核 MySQL 表中的更改(使用 MySQL 4)?

    我被要求审核 MySQL 表中的任何 所有更改 有谁知道有什么工具可以帮助我做到这一点 还是我需要编写自己的解决方案 如果我编写自己的审计 我最初的想法是制作一个单独的表并在 PHP 代码中构建一系列更改 类似 fieldname1 gt
  • 如何从 MySQL 中的布尔类型返回不同的字符串?

    如果我在 MySql 中将一列设置为布尔值 则查询将返回以下值 0 or 1 是否可以做这样的事情 SELECT bool value AS yes OR no 我的意思是 根据真假返回两个不同的字符串 SELECT CASE WHEN b
  • Postgresql 串行错误自动增量

    我在 postgresql 上遇到问题 我认为 postgresql 中有一个错误 我错误地实现了一些东西 有一个表包括colmn1 primary key colmn2 unique colmn3 插入一行后 如果我尝试使用现有的另一次插
  • sql server 2008 对 exec 语句的限制

    我只需要仔细检查 t sql 中的 EXEC 命令是否有字符限制 如果我有一个带有 varchar max 的变量并使用 EXEC 执行命令 你认为这样可以吗 thanks 应该没问题 根据这篇 MSDN 文章 http msdn micr
  • PHP,文本从数据库中回显,没有换行,全部一体

    我的数据库中有一个长文本 从 php mayadmin 来看它看起来很好 但是当我将它回显到页面时 它会丢失所有格式 即没有新行 全部都在一个块中 有任何想法吗 Thanks 可能是因为换行符是 n 并且 html 想要 br 所以使用nl
  • 优化 LATERAL join 中的慢速聚合

    在我的 PostgreSQL 9 6 2 数据库中 我有一个查询 该查询根据一些股票数据构建计算字段表 它为表中的每一行计算 1 到 10 年的移动平均窗口 并将其用于周期性调整 具体来说 CAPE CAPB CAPC CAPS 和 CAP
  • MySQL:“您的 SQL 语法错误...靠近键...”? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我发现了一个非常酷的用于丢失密码的脚本 但是这一行给我带来了问题 r mysql query INSERT INTO keys u
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1
  • Oracle 按月滚动或运行总计

    目标 每个月末所有报表的滚动 运行总计 Code select TRUNC ACTHX STMT HX STMT DATE MM AS MNTH COUNT ACTHX INVOICE as STMTS from ACTHX group b
  • MYSQL 的 Google OAuth 2.0 用户 ID 数据类型

    我正在实施 Google OAuth 2 0 并注意到 Google OAuth 返回的唯一用户 ID 是21位数字长的 我想大整数 20 足以满足这种需求 但我现在看到 Google OAuth 返回的用户 ID 的长度感到困惑 关于我应

随机推荐

  • Https图片链接下载问题

    1 获取方法 入参是一个Url 和一个随机的名称 返回值是MultipartFile 这里因为我这里需要调接口传到服务器 这里也可以直接通过inputStream进行操作 按需修改 通过Url获取文件 param url param fil
  • 搭建Eureka服务

    搭建Eureka服务 文章目录 搭建Eureka服务 搭建EurekaServer 注册user service 注册多个实例 在order service中完成服务拉取和负载均衡
  • DTO/DO/VO分层与拷贝

    作者简介 大家好 我是smart哥 前中兴通讯 美团架构师 现某互联网公司CTO 联系qq 184480602 加我进群 大家一起学习 一起进步 一起对抗互联网寒冬 这一篇其实没太多实质内容 本来不打算写的 但想到当初从传统通信行业跳到互联
  • 迪普防火墙开局登录

    文章内容来自迪普官方 产品文档 杭州迪普科技股份有限公司
  • H3C 交换机指示灯说明

    端口模式指示灯 mode 为了使用户通过交换机各类型端口的 端口状态指示灯 能够获取更多的设备信息 本系列交换机 S5560S 28F EI 和 S5560S 52F EI 除外 的同一个 10 100 1000BASE T 自适应以太网端
  • H3C AC双链路备份基本组网典型配置举例

    1 6 1 双链路备份基本组网典型配置举例 1 组网需求 AP 通过 Router A 与 AC 1 和 AC 2 连接 要求使用双链路备份对 AC 进行备份 AC 1 工作在主用状态 AC 2 工作在备用状态 当 AC 1
  • 基于SpringBoot+Vue的科研项目验收管理系统设计实现(源码+lw+部署文档+讲解等)

    文章目录 前言 详细视频演示 具体实现截图 技术栈 后端框架SpringBoot 前端框架Vue 持久层框架MyBaitsPlus 系统测试 系统测试目的
  • AWS解决方案架构师学习与备考

    系列文章目录 送书第一期 用户画像 平台构建与业务实践 送书活动之抽奖工具的打造 获取博客评论用户抽取幸运中奖者 送书第二期 Spring Cloud Alibaba核心技术与实战案例 送书第三期 深入浅出Java虚拟机 送书第四期 AI时
  • 2015,TEVC,Adaptive MOPSO Based on Parallel Cell Coordinate System

    Abstract 在多目标粒子群优化 MOPSO 的设计中 管理收敛性和多样性是至关重要的 以搜索真实Pareto最优前沿的准确和良好分布的近似 粒子群优化算法由于其快速收敛性 在进化过程中会导致多样性的快速丢失 现有的MOPSOs在 le
  • OneNote笔记使用记录

    1 快捷键 2 快速设置行距 Ctrl 1 设置一倍行距 Ctrl 2 两倍行距 Ctrl 5 1 5 倍行距 3 切换样式标题 Ctrl Alt 1 标题 1 Ctrl Alt 2 标题 2 Ctrl Alt 3 标题 3 Ctrl Sh
  • vtk用户指南 第十一章 随时间变化的数据

    11 1时序支持简介 创建可视化工具包的目的是允许人们可视化 从而探索具有空间范围的数据中的特征 它允许人们回答一些问题 比如 在这些数据中 最大价值的区域在哪里 它们有什么形状和价值 以及 这些形状是如何分布的 VTK提供了大量的技术来显
  • 阿里云一二级域名配置

    一级域名配置 二级域名配置
  • 2023中国品牌节金谱奖荣誉发布 酷开科技获颁OTT行业科技创新奖

    11月17日 19日 以 复苏与腾飞 为主题的2023第十七届中国品牌节 在杭州市云栖小镇国际会展中心成功举行 在18日晚间的荣耀盛典上 TopBrand 2023中国品牌节金谱奖 荣誉发布 酷开科技斩获OTT行业科技创新奖 酷开科技作为O
  • 面试150-13(Leetcode238除自身以外数组的乘积)

    代码 class Solution public int productExceptSelf int nums int n nums length int res new int n int product 1 int zerocnt 0
  • 再看参数校验

    作者简介 大家好 我是smart哥 前中兴通讯 美团架构师 现某互联网公司CTO 联系qq 184480602 加我进群 大家一起学习 一起进步 一起对抗互联网寒冬 写一个接口 大致就几个步骤 参数校验 编写Service Dao SQL
  • 如何开发一个免费的App

    开发一个免费App意味着能够在项目启动初期 以更低成本的方式进行业务的迭代和市场化验证 互联网发展到2023年 尤其在生成式AI及大模型技术 跃进式 增长的背景下 一个创新式商业模式的起步变得异常艰难 但如果用好工具 那么不仅能事半功倍 还
  • 网络安全设备概念的熟悉和学习

    什么是网络安全 网络安全技术有哪些 Web应用防火墙 WAF 为什么需要WAF 什么是WAF 与传统防火墙的区别 WAF不是全能的 入侵检测系统 IDS 什么是IDS 跟防火墙的比较 部署位置选择
  • 【网络安全】—Shell编程入门(1)

    文章目录 基础 变量概念介绍 特殊变量进阶 数值计算实践 条件测试比较 条件判断语句 流程控制语句 循环语句应用
  • threejs 解析外部模型关键帧动画

    参考资料 threejs中文网 threejs qq交流群 814702116 解析外部模型关键帧动画 前面几节课 用到的关键帧动画 是借助threejs提供的两个类 KeyframeTrack AnimationClip 自己写代码实现
  • SQL Server 大数据量分页

    1 ROW NUMBER OVER 方式 SQL2012以下推荐使用 SELECT FROM SELECT ROW NUMBER OVER ORDER BY menuId AS RowId FROM sys menu AS r WHERE