当前位置: 首页 > news >正文

分页操作中使用LIMIT和OFFSET后出现慢查询的原因分析

事情经过

最近在做批量数据处理的相关业务,在和下游对接时,发现拉取他们的业务数据刚开始很快,后面会越来越慢,40万数据一个小时都拉不完。经过排查后,发现对方用了很坑的分页查询方式 —— LIMIT OFFSET,导致数据量大的时候查询效率爆低。

简单分享下,为什么使用了 LIMIT OFFSET会导致查询效率变低 —— 

主要原因

1. 数据库扫描:当 OFFSET 值很大时,数据库引擎需要扫描和跳过 OFFSET 行之前的数据,这会导致数据库执行大量的读取和跳过操作,增加了查询的开销。

2. 数据库排序:通常情况下,使用 LIMIT 和 OFFSET 进行分页需要对查询结果进行排序。当 OFFSET 值很大时,需要对大量的数据进行排序操作,这也会增加查询的时间和资源消耗。

3. 内存使用:OFFSET 值较大时,数据库可能需要将大量的数据加载到内存中进行排序和跳过操作,这会增加内存的使用量,对数据库性能产生影响。

解决方案

为了解决这个问题,可以考虑使用其他分页技术,例如基于游标(Cursor-based)的分页。游标分页不依赖于 OFFSET 值,而是使用基于某个唯一标识符(例如主键)的游标来获取下一页的数据。这种方式可以避免数据库扫描和排序的开销,提高查询性能。下游最终也是采取了使用主键id进行了分页。

另外,对于大型数据集的分页查询,还可以考虑使用索引优化、缓存技术、分库分表等方法来提高查询性能。

总结一下,使用 LIMIT 和 OFFSET 进行分页时,当 OFFSET 值很大时可能会导致查询变慢,因为需要扫描和跳过大量的数据。为了提高性能,可以考虑使用游标分页或其他优化技术来替代使用 OFFSET 进行分页。

http://www.lryc.cn/news/261993.html

相关文章:

  • Java八股文面试全套真题【含答案】- Redis篇
  • 【C++11特性篇】一文助小白轻松理解 C++中的【左值&左值引用】【右值&右值引用】
  • 动态规划——OJ题(一)
  • 六:爬虫-数据解析之BeautifulSoup4
  • 音频筑基:总谐波失真THD+N指标
  • 自动驾驶技术:驶向未来的智能之路
  • TIGRE: a MATLAB-GPU toolbox for CBCT image reconstruction
  • 我的NPI项目之Android 安全系列 -- EMVCo
  • vue中实现使用相框点击拍照,canvas进行前端图片合并下载
  • 边缘检测@获取labelme标注的json黑白图掩码mask
  • 嵌入式培训-数据结构-day23-线性表
  • C# DotNetCore AOP简单实现
  • 19.Tomcat搭建
  • HarmonyOS云开发基础认证考试满分答案(100分)【全网最全-不断更新】【鸿蒙专栏-29】
  • Unity项目里Log系统该怎么设计
  • 设计模式-状态(State)模式
  • oracle怎么存放json好
  • 【计算机网络】—— 详解码元,传输速率的计算|网络奇缘系列|计算机网络
  • [ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证
  • 计算机网络:网络层(无分类编址CIDR、计算题讲解)
  • Learning Semantic-Aware Knowledge Guidance forLow-Light Image Enhancement
  • 关于嵌入式开发的一些信息汇总:开发模型以及自托管开发(二)
  • 【JavaEE】多线程案例 - 定时器
  • 网络小测------
  • 基于linux系统的Tomcat+Mysql+Jdk环境搭建(二)jdk1.8 linux 上传到MobaXterm 工具的已有session里
  • 04-Nacos中负载均衡规则的配置
  • Kotlin 中的 `use` 关键字:优化资源管理(避免忘记inputStream.close() ?)
  • 时序预测 | Python实现GRU-XGBoost组合模型电力需求预测
  • 扁平化菜单功能制作
  • 网络基础——路由协议及ensp操作