SQL Server 大数据量分页

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则效率太低,完全不推荐。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/233970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu18.04.6下samba服务的安装及配置

目录 01 安装samba服务: 03 重启samba服务 04 设置samba登录密码 05 测试 前言 从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博…

Unity3D 中正确调用CUDA程序详解

前言 Unity3D 是一款强大的游戏开发引擎,可以实现各种各样的游戏效果。然而,在某些情况下,使用CPU来处理游戏中的复杂计算任务可能会导致性能瓶颈。为了解决这个问题,我们可以利用CUDA来使用GPU进行并行计算,从而提高…

JavaWeb笔记之JavaWeb JDBC

//Author 流云 //Version 1.0 一. 引言 1.1 如何操作数据库 使用客户端工具访问数据库,需要手工建立连接,输入用户名和密码登录,编写 SQL 语句,点击执行,查看操作结果(结果集或受影响行数)。…

HarmonyOS应用开发-手写板(二)

在前一篇手写板的文章中(HarmonyOS应用开发-手写板-CSDN博客),我们通过使用Path实现了一个基本的手写板,但遗憾的是,无法保存所绘制的图像。在本文中,我们将采用canvas和Path2D来重新构建手写板应用。依然只…

java中基本类型之间的转换

基本类型容量 java中的 8 种基本数据类型,以及它们的占内存的容量大小和表示的范围 byte:字节型,占内存容量为 1 个字节(8 位),表示范围为 -128(-2^7)到 127(2^7-1&…

关于MQ,你了解多少?(干货分享之一)

导语 本文梳理笔者 MQ 知识,从消息中间件的基础知识讲起,在有了基础知识后,对市面上各主流的消息中间件进行详细的解析,包括 RabbitMQ、RocketMQ、Kafka、Pulsar,最后再横向对比这几款主流的消息中间件。 消息中间件…

Linux下搭建Redis一主二从的哨兵模式

一、Redis哨兵模式搭建 1、准备好三台机器,使用diap用户完成搭建 2、安装Redis -在资源库中下载redis-7.0.8.tar.gz,分别上传到三台服务器中软件安装的目录,我这里安装到/u01下 -安装依赖。yum -y install gcc-c(root用户执行…

数据库实现分布式锁,redis实现分布式锁,zookeeper实现分布式锁的优缺点及性能分析

文章目录 优缺点分析数据库实现分布式锁优点缺点 redis实现分布式锁优点缺点 zookeeper实现分布式锁优点缺点 汇总对比小结 优缺点分析 数据库实现分布式锁 优点 简单易懂:简单,使用方便,不需要引入 Redis、Zookeeper 等中间件。兼容性好&…

vue onlyoffice在线编辑与预览,文件无法保存问题,始终打开同一文件的问题

主要写一下前端vue的使用&#xff0c;需要后端或运维去弄docker服务&#xff0c;然后给前端一个api地址 在vue的Index.html页面添加这个 <script type"text/javascript" src"http://docker服务器ip:docker服务器端口/web-apps/apps/api/documents/api.js&q…

智能优化算法应用:基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鼠群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鼠群算法4.实验参数设定5.算法结果6.参考文献7.MA…

【网络安全】—Shell编程入门(1)

文章目录 基础变量概念介绍特殊变量进阶数值计算实践条件测试比较条件判断语句流程控制语句循环语句应用 Shell 是 Unix/Linux 操作系统下的一种命令行解释器&#xff0c;它接收用户输入的命令然后调用相应的程序。我们可以通过 Shell 脚本来自动执行一系列的命令。接下来&…

Logback简介与配置详解

在开发和维护Spring Boot应用程序时&#xff0c;一个强大而灵活的日志框架是至关重要的。Spring Boot默认集成了Logback&#xff0c;一个高性能的Java日志框架。本文将介绍如何配置Logback以满足你的日志记录需求。 Logback简介 官方网址&#xff1a;https://logback.qos.ch/ …

JAVA面试题14

Java中的Lambda表达式是什么&#xff1f; 它有什么作用&#xff1f; 答案&#xff1a;Lambda表达式是一种简洁的语法&#xff0c;用于创建函数式接口的实例。Java中的Lambda表达式可以简化代码、减少冗余的匿名类和提高程序的可读性&#xff0c;支持函数式编程的特性。 什么是…

【C++进阶】继承

一、继承的基本概念及定义 1.1 继承的概念 继承的本质是代码的复用 比如&#xff1a; 学校的师生管理系统 有学生、老师、宿管阿姨等 每个人都有的信息名字、电话 身份证号、年龄、性别等 我们可以发现有些类型是具有共性的 如果每个类都去写&#xff0c;初始化时每个 都要初…

Vault实战(一)-Vault介绍

1 Vault介绍 Vault 是一个基于身份的秘密和加密管理系统。秘密是您想要严格控制访问的任何内容&#xff0c;例如 API 加密密钥、密码和证书。 Vault 提供由身份验证和授权方法控制的加密服务。使用 Vault 的 UI、CLI 或 HTTP API&#xff0c;可以安全地存储和管理、严格控制&a…

FPGA 实现 LeNet-5 卷积神经网络 数字识别,提供工程源码和技术支持

目录 1、前言LeNet-5简洁基于Zynq7020 的设计说明PL 端 FPGA 逻辑设计PS 端 SDK 软件设计免责声明 2、相关方案推荐卷积神经网络解决方案FPGA图像处理方案 3、详细设计方案PL端&#xff1a;ov7725摄像头及图像采集PL端&#xff1a;图像预处理PL端&#xff1a;Xilinx推荐的图像缓…

ASO优化实践经验和改进措施

在积累了大量的实战经验后&#xff0c;小柚总结了一些关于ASO优化的经验给大家分享。共同进步&#xff01;共同学习&#xff01;Fighting&#xff01; 一、关键词研究 关键词研究是ASO优化的基础。在进行关键词研究时&#xff0c;需要了解用户搜索意图、关键词竞争情况和关键…

1265. 数星星(树状数组/蓝桥杯)

题目&#xff1a; 输入样例&#xff1a; 5 1 1 5 1 7 1 3 3 5 5输出样例&#xff1a; 1 2 1 1 0 思路&#xff1a; 树状数组 代码&#xff1a; #include<cstdio> #include<iostream> using namespace std; const int N32010; int n; int tr[N],level[N];int lo…

linux:掌握systemctl命令控制软件的启动和关闭、掌握使用ln命令创建软连接

掌握使用systemctl命令控制软件的启动和关闭 一&#xff1a;systemctl命令&#xff1a; Linux系统很多软件(内置或第三方)均支持使用systemctl命令控制:启动停止、开机自启 能够被systemctl管理的软件一般也称之为:服务 语法: systemctl | start | stop | status | enable …

C++接口类使用Qt的虚信号

项目中封装库的对外接口类&#xff0c;包括Qt的插件框架&#xff0c;希望接口类是一个比较干净的类&#xff0c;不需要继承自Object&#xff0c;与Qt无关系&#xff0c;但又需要它的子类使用Qt的信号和槽机制&#xff0c;则可以如下处理。 接口类&#xff1a; /* 处理请求 */ …