使用id限定优化mysql分页查询limit偏移量大问题

news2025/7/19 15:39:40

在工作中可能偶尔会遇到,当使用limit实现分页查询时,当limit的偏移量越大时,sql语句的耗时也越大。

如图:

偏移量为0时,sql语句耗时在35毫秒。

顺便说下偏移量与页码、页大小的关系:

偏移量 = (页码  - 1)  x  页的大小

比如页的大小是每页100行记录, 那么:

第一页的偏移量就是  (1 - 1) x 100 = 0

第二页的偏移量就是  (2 - 1) x 100 = 100

以此类推

当加大偏移量时:

当偏移量加到100000时,耗时也增大到228毫秒。

为什么偏移量会对性能有这么大影响呢?

上图是mysql的系统结构图,客户端程序发送sql语句查询请求给服务层,服务层会解析、优化sql语句,之后交给存储引擎,也就是说,存储引擎是真正完成查询的(增加、删除、修改也是由存储引擎负责的)。

select * from orderinfo limit 100000, 100

 

当存储引擎查询数据库文件后返回的不是一页的数据(100行), 而是从第1行 到 第 (100000 + 100)行的数据一起返回给服务层。  服务层收到数据后会抛弃前面的100000行,只留下最后的100行返回给客户端。

数据库表中行数据、索引都是以文件的形式存储到磁盘(硬盘)上的,而硬盘的速度相对来说要慢很多,存储引擎运行sql语句时,需要访问硬盘查询文件,然后返回数据给服务层。当返回的数据越多时,访问磁盘的次数就越多,就会越耗时。这就是为什么偏移量越大、返回的数据越多,越耗时的原因。

所以说,如果想优化上面的sql时,必须要减少返回的数据。

当表的主键是有序的,或者是自增的,可以使用id限定查询,查询过程是:

当已经查询了某页的数据后,记录下该页最后一行记录的主键id值(本例中是dbid为主键),查询下一页时就可以使用如下sql:

select * from orderinfo where 主键列名 > 当前页最后一行的主键值 limit 0, 100

比如:

 

当前页最后一行的主键值是132587,查询下一页就可以使用:

select * from orderinfo where dbid > 132587 limit 0, 100

 

 

 

那么第一页怎么查询呢?

可以选择一个比所有主键值都小的值,比如0或者负数 :

select * from orderinfo where dbid > 0 limit 0, 100

如果不明白也可以观看视频教程:

https://www.bilibili.com/video/BV12G4y1x73m

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

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

相关文章

Spark的内存管理机制

在执行Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程,前者为主控进程,负责创建 Spark 上下文,提交 Spark 作业(Job),并将作业转化为计算任务(Task&#xf…

深度学习基础--神经网络(1)激活函数

文章目录从感知机到神经网络激活函数阶跃函数(感知机的激活函数)sigmoid函数阶跃函数和sigmoid函数绘制和对比ReLU函数本文为学习笔记参考书籍:《深度学习入门 : 基于Python的理论与实现 》/ (日) 斋藤康毅著 ; 陆宇杰译. – 北京 : 人民邮电…

根据水声和摄影测量数据建立数字测深模型

无人船和无人车正越来越多地用于水深地形测量。使用这些平台采集数据的技术得到普遍的应用,但数据的融合仍然需要深入研究,其融合方法通常依赖于所使用的传感器和测量区域的特性。本文提出了一种融合无人艇(USV)和无人机&#xff…

[附源码]java毕业设计基于的前端课程学习网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Mybatis—SqlNode

SqlNode的主要职责就是描述Mapper文件中配置的SQL信息,在Mybatis源代码中随处都能看见其身影,可见SqlNode地位是相当高的。SqlNode接口只定义了一个apply方法,且该方法只有一个DynamicContext对象作为入参。DynamicContext对象中不仅封装了Ma…

抓包工具 Charles 使用手册

Charles 是一款抓包软件,通过代理的形式拦截所有的 HTTP 和 HTTPS 请求,是开发测试的一大利器 下载和激活 在 Charles 下载安装包,在 此处 获得注册码,点击下方输入注册码激活软件 抓主机的 HTTP 包 选中 Proxy > Windows P…

第五章 数组和广义表

数组和广义表 5.1多维数组 5.1.1数组的逻辑结构 数组是我们熟悉的一种数据结构,可以看作线性表的推广。 数组作为一种数据结构其特点是结构中的元素本身可以是具有某种结构的数据,但属于同一类型。比如:一维数组可以看作一个线性表&#…

NDepend v2022.2.1.9665 专业版

NDepend 基本上被描述为.NET 托管代码的静态分析工具。这个特定的工具能够支持大量代码度量,允许使用直接图和依赖矩阵来可视化依赖关系。 NDepend 工具还能够通过架构验证过程以及规则及其质量为用户和开发人员执行基于代码的快照比较。有些规则基本上是用户定义的…

联想中国上半财年业绩:转型深入 方案服务同比增24%

11月15日,联想中国举办2022/23财年上半财年工作总结会。会上透露,联想中国经受住诸多不利因素的考验,PC市场份额保持稳定,3S新业务(3S指智能设备、智能基础设施和方案服务)顽强成长、收入占比达到28.6%&…

MCE 虚拟筛选、小分子化合物库

CNS Library &#xff08;含 47,040 种化合物&#xff09;高血脑屏障穿透率的小分子化合物数据库 CNS library 精选具有低极性表面积(TPSA< 70 2)、低 ClogP (平均为1.63)、低氢键形成程度(氢键供体和受体的总数小于 8 )、低 MW(平均为283) 等具有高血脑屏障穿透率的化合物…

css毛玻璃效果/el-progress进度条渐变/axios的基本使用/跨域配置/关闭eslint验证

css磨砂效果 效果图 实现方法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content&qu…

NNG pair 异步通信

一&#xff0c;利用NNG pair模式&#xff0c;实现异步通信。 二&#xff0c;manager端 绑定地址&#xff0c;回调函数里 接收 异步消息&#xff1a; #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <…

HTTP协议中Gzip格式的流量分析与识别

背景 在协议分析过程中&#xff0c;经常会发现gzip压缩的数据&#xff0c;例如在HTTP协议中&#xff0c;在HTTP头中会标示&#xff0c;内容编码为gzip、DEFLATE。 但是&#xff0c;还有很多情况&#xff0c;例如一些非HTTP协议&#xff0c;特别是私有协议中&#xff0c;数据同…

强大的图片处理工具GraphicsMagick

前言 项目中我们经常需要对图片进行压缩、剪切、添加水印、生成缩略图、图片合成等图片处理操作&#xff0c;关于这些图片复杂处理&#xff0c;我们将如何实现呢&#xff0c;本文将介绍GraphicsMagick对图片进行相关处理功能。 简介 GraphicsMagick是一个免费的创建、编辑、…

16.Redis系列之Redisson分布式锁原理

本文学习Redisson分布式锁的原理以及优缺点 1. Redisson分布式锁原理 lua脚本是原子操作&#xff0c;redis会将整个脚本作为一个整体执行&#xff0c;中间不会被其他命令打断 # RedissonLock.tryLockInnerAsync方法内lua脚本加锁 <T> RFuture<T> tryLockInnerAs…

代码随想录算法训练营第三十四天| LeetCode1005. K 次取反后最大化的数组和、LeetCode134. 加油站、LeetCode135. 分发糖果

一、LeetCode1005. K 次取反后最大化的数组和 1&#xff1a;题目描述&#xff08;1005. K 次取反后最大化的数组和&#xff09; 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。重复这个过…

TNF 又见 《Cell》

现有的研究表明&#xff0c;需要新的机会来增加免疫检查点封锁&#xff08;Immunecheckpoint blockade&#xff0c;ICB&#xff09;的影响。尽管干扰素&#xff08;IFN&#xff09;γ途径同时具有 ICB 抗性因子和治疗机会&#xff0c;但至今为止&#xff0c;研究人员尚未系统地…

采用新项目管理软件的四个步骤

这是采用新项目管理软件的有趣之处&#xff1a;它本身实际上是一个重大项目&#xff0c;而且您的组织越大&#xff0c;这个过程就越艰巨。 当然&#xff0c;成功的项目管理实施最终将有助于简化您的运营并最大限度地提高跨部门的效率——这有利于团队成员的士气、客户满意度…

国内外的免费AI作图工具

1.文心一格 文心一格 - AI艺术和创意辅助平台 “推荐”页面操作比较简单&#xff0c;只需要需要简单的一句话&#xff0c;等几分钟就可以直接生成&#xff1a; 主要可以用来生成不同“氛围感”十足的场景&#xff1a; 美丽的花田&#xff1a; 优点&#xff1a; 1.比较容易…

【数据结构】—— 二叉树(C)

二叉树 文章目录二叉树二叉树的概念&#xff1a;树的术语二叉树的大概样式先序创建二叉树二叉树的遍历方式先序遍历中序遍历后序遍历二叉树的概念&#xff1a; 二叉树&#xff08;Binary Tree&#xff09;是n(n>0)个结点的有限集合&#xff0c;该集合或者为空集&#xff08…