SQL优化之深分页

浅谈深分页问题 曾经面试被问到怎么解决深分页问题,因为以前项目用来es,所以重点问的是es的深分页问题,问我怎么解决深分页的问题,我的回答就是没解决。因为我觉得深分页就解决不了(先别浮现出各种网上解决深分页的方式,然后反驳这句话) 与其讨论什么从技术上去解决,还不如换个解读想下: 什么样的场景下会触发深分页? 当真的出现深分页问题的时候,如何实现系统的自我保护? 对第一个问题:我觉得就两种情况:第一:正常的业务流量,用户真的闲得蛋疼了,真的就一页一页的往下翻,翻到了几千上万页(只有闲得蛋疼的才会去做这件事情,否则根. 阅读详情

SQL优化之深分页

我们都知道,大型项目中的SQL语句,应该尽量避免深分页。

那么问题就来了:

  1. 深分页的性能差在哪?
  2. 什么方案能避免深分页呢?

什么是深分页

深分页,即SQL查询过程中,使用的页数过深,数据库执行的过程中,需要遍历前面很多数据并跳过后,才返回数据的过程。

这种情况会导致SQL查询变慢;

深分页的性能问题

上面介绍了深分页的描述,那下面具体看下深分页的性能问题。

1、覆盖索引
select uid from user_info limit 100, 10;
select uid from user_info limit 10000, 10;
select uid from user_info limit 1000000, 10;
select uid from user_info limit 2000000, 10;

在这里插入图片描述

在查询语句能够命中覆盖索引的情况下,可以看到查询范围在[2000000,2000010]的10条数据,耗时近200ms。对于线上千万级的数据表来说,即使查询不需要回表,那也是妥妥的慢查询,

2、非覆盖索引
select * from user_info limit 100, 10;
select * from user_info limit 10000, 10;
select * from user_info limit 1000000, 10;
select * from user_info limit 2000000, 10;

在这里插入图片描述

同样的查询范围,对于需要回表的SQL查询,耗时提高了近4倍,查询效率更低。

深分页的优化

1、Inner Join

使用Inner Join提高深分页,原理是减少查询时的回表次数;

利用id的有序性,通过子查询获取到指定记录的一组id,再查询id对应的记录。

select * from user_info limit 2000000, 10;
select * from user_info
inner join (
 select uid from user_info limit 2000000, 10 
) as sub on sub.uid = user_info.uid;

在这里插入图片描述

2、边界记录

上面的Inner Join 用到了子查询,对性能还是有一定的影响;

如果业务中的页遍历是顺序的,没有跨页的情况,那可以考虑对每次查询接结果,记录返回的最大id,作为下一次查询的开始id。

这样就能避免子查询的使用,同时减少回表次数。

select * from user_info where id >= 2000010 limit 10;

在这里插入图片描述

总结

对于深分页问题,无论是使用Inner Join、还是记录上一个id,核心思路都是要降低回表次数。

关于深分页解决办法记录 mysql深分页 阅读详情

相关推荐

关于MySQL深分页的问题及优化方案

本文探讨MySQL深分页(如LIMIT 1000000,100)的性能问题及优化方案。传统分页随着offset增大,会产生大量数据扫描、锁竞争和I/O瓶颈。主要优化策略包括:1)基于主键游标分页避免offset;2)延迟关联减少数据扫描;3)覆盖索引避免回表;4)分区表缩小查询范围;5)缓存高频访问数据;6)业务层限制最大页数或预加载。核心思路是通过减少数据扫描量和避免全表offset来提升性能,建议根据业务场景组合使用游标分页、延迟关联等方案,并配合索引优化和业务逻辑调整。

weixin_50055999的博客 1594

深分页优化总结

深分页

qq_32979219的博客 3250

【VAE学习笔记】全面通透地理解VAE(Variational Auto Encoder)

完整笔记:http://www.gwylab.com/note-vae.html 李宏毅老师的教程视频:https://www.bilibili.com/video/av15889450/?p=33 —————————————————————————————————   依据李宏毅老师的讲解,我整理了一番VAE的笔记。先简单介绍一下VAE,VAE作为一个生成模型,其基本思路是很容易理解的:把一堆真...

a312863063的博客 14万+

SQL - MySQL深分页

记录每次取出的最大id, 然后where id > 最大id。

MinggeQingchun的博客 1693

2024“华为杯”中国研究生数学建模竞赛(A题)深度剖析_数学建模完整过程+详细思路+代码全解析

目标是优化风力涡轮机的功率调度,使其在给定的实时风速数据下,最小化涡轮机关键组件(如塔架和主轴)的疲劳损伤。问题的挑战在于,考虑通信延迟和测量噪声的同时,要确保功率输出与风速变化的响应快速且准确。

2401_82549447的博客 6630

【汇编】TSR内存驻留程序实现与删除及热键设置——以实现时钟为例

【汇编】TSR内存驻留程序实现与删除及热键设置——以实现时钟为例 最近完成了一个关于时钟中断驻留的汇编大作业,对于TSR很是感兴趣,查阅了不少资料,发现现在很少相关的内容资料。尤其是TSR删除这一块几乎找不到在低的水平完全正确的做法,下面我对于TSR的删除我会介绍一种几乎小程序可以完成的方法。当然,标题中的TSR实现,热键设置我也会一一介绍。

cly116的博客 3971

SQL优化——深分页&排序

在普通索引上查询到叶子节点并获取对应的主键后,若SQL中需要获取索引列以外的值,则需要到主键索引上,利用先前定位到的主键进行回表操作,获取完整的数据。同时对比SQL1和SQL2,两者只有在offset的部分存在区别,所以当offset变大时,会导致回表后需要扫描记录数显著增加(这也说明limit的执行逻辑是在回表之后,但是where条件执行是会在索引或者回表时就应用的,那么有办法把limit的操作前置到where中呢?排序结果取前20行, 得到对应的id,从聚簇索引中回表,得到完整的数据。

weixin_55010563的博客 1066

Comsol 压电换能器声场仿真(远场分析、边界元法优化)

本文详细介绍了在Comsol中使用边界元法进行压电换能器远场声场仿真的高效方法。针对传统有限元法计算远场时内存消耗大、耗时长的问题,文章阐述了边界元法在处理无限域、提升计算效率和精确获取远场指向性方面的核心优势,并提供了从多物理场耦合设置、网格划分策略到求解器配置及结果验证的完整实战指南。

weixin_29045585的博客 407

深分页优化 java sql 代码

我整理的一些关于【Java】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/bLN8S1深分页优化 Java SQL 代码 在现代应用程序中,随着数据量的不断增加,如何有效地进行数据的分页查询成为了一个至关重要的问题。常规的分页查询在数据量庞大的时候,性能会明显下降,尤其是在...

weixin_34514218的博客 238

基于STM32的多普勒雷达测速

基于多普勒雷达传感器,以STM32单片机为主控芯片,根据不同模块检测距离的不同,使用不同多普勒雷达传感器实现对远近距离车辆行驶速度及方向的测量。 1、基础知识 无线电探测和测距,是用无线电(电磁波)方法发现目标并测定其空间位置的装置。随着雷达技术的发展,现代雷达不仅可以对目标进行定位,还可以测量目标的速度、对目标进行成像甚至测量目标的大小和材料特性。所有利用雷达波来检测物体速度的原理,其理论基础皆源自于“多普勒效应”,...

weixin_52801934的博客 6315

文件上传漏洞攻击与防范方法

文件上传漏洞攻击与防范方法 文件上传漏洞简介: 文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。 文件上传漏洞危害: 上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传...

m0_38103658的博客 4万+

1、如何优化百万数据sql带查询的分页查询(实战优化深分页)浅分页和深分页的思考

分析: 深分页 分析: 情况是一样的但是执行时间会有不同 浅分页1.2s深分页2.0s思考:为什么浅分页的查询时间短,而深分页查询时间长?原理:其中浅分页我们的偏移量小,而我们的深分页偏移量大,其中偏移量大扫描的行数就会比浅分页要多,所以就时间更长 分析 我们就发现其中key走了索引,然后type就是index了,extra也为空,那么也就是没有执行额外的任务了我们再看深分页(出现问题了) 分析:还是全表扫描,也有额外执行任务,没走索引 浅分页用时,0.38s深分页用时,1.91s思考:为什么浅分页查询得

分享JAVA/ Python/ Ts学习路上的一些笔记,不足之处多多见谅。 2762

YOLO26 改进 | (教师:YOLOv8L,学生:YOLO26) | 知识蒸馏 (Knowledge Distillation)

本文介绍了基于YOLO26框架的知识蒸馏实战方法,通过教师模型指导学生模型训练,在不增加推理成本的情况下提升模型精度。文章详细阐述了基于响应的知识蒸馏实现方案,通过最小化教师与学生模型预测Logits间的KL散度实现知识迁移。核心实现包括:1) 创建DistillationModel包装器类,同时运行师生模型;2) 自定义DistillationLoss,在原检测损失基础上增加KL散度损失。该方法适用于希望保持YOLO26轻量级特性同时获得接近大模型精度的场景,文中提供了完整的代码实现方案。

weixin_51988935的博客 510

sql慢查询之深分页优化实战:从3秒到0.1秒的优化之路

sql慢查询之深分页优化实战:从3秒到0.1秒的优化之路

jsjbrdzhh的博客 1601

【YOLOv11工业级实战】27. TensorRT量化实战:FP16/INT8极致加速!边缘设备YOLOv11推理速度提升4倍,精度损失控制在1.5%内

摘要:本文针对智慧园区200路摄像头实时分析的工业痛点——RTX 3080单卡仅能处理12路视频流(YOLOv11-nano FP32精度45FPS,需≥120FPS且精度损失≤3%),提供TensorRT量化完整解决方案。从原理解析(FP16/INT8精度差异与量化逻辑)到实操落地(ONNX转换、FP16引擎构建、INT8精细校准),全程给出可复用代码。实测显示:FP16量化后速度达128FPS(×2.8),精度损失0.2%。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1720

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SQL深分页的建议优化方案

假如有 t_order表 数据量有1000w,现在想分页查询第80w页的数据,每页10条,最基本的sql如下上面查询的问题在于,MySQL 必须扫描前 7999999 行(注意这里应该是 7999999,因为 LIMIT 子句中的偏移量是基于 0 的索引,但实际上它包括了这一行)来定位到第 7999990 行之后的 10 行数据。这种全表扫描(或至少是大部分表的扫描)在大数据集上是非常耗时的。

落日的博客 844

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SQL 深分页场景如何优化?

通过测试4000w数据场景下,针对二级索引分页的场景,如果是使用limit n,m分页方式,查询速度是245秒,如果采用优化SQL语句来查询,查询速度只需要0.4秒。这是因为MySQL会扫描从0记录开始扫描到100020条记录,时间复杂度为O(n),然后只返回20条给客户端,前面100000条数据将被抛弃。如果是使用了二级索引,这种场景的性能会加剧,因为对前100000条数据都会进行回表查询,就导致了很多次的随机IO。

阿星小天地 355

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

千万级数据深分页查询SQL性能优化实践大纲

数据库优化使用索引数据库优化在千万级数据深分页查询中扮演着重要的角色。使用索引是一种有效的数据库优化方法。索引是在数据库表中创建的数据结构,它可以加快数据的检索速度。在深分页查询中,使用适当的索引可以大大提高查询效率。索引可以根据查询条件快速定位到匹配的数据行,避免了全表扫描的性能损耗。在设计索引时,需要根据查询条件、排序...

985

千万级数据深分页查询SQL性能优化实践

千万级数据深分页查询SQL性能优化实践总结:​在本文中,我们详细研究了如何对千万级数据进行深分页查询SQL性能优化的实践方法。通过使用一些有效的技术手段和最佳实践,我们成功地改进了SQL查询的效率,并提高了系统的响应速度。​首先,我们深入了解了深分页查询的概念和挑战,并分析了常见的性能瓶颈。接着,我们提出了一系列的优化策略,包括使用索引、优化查询语句、合理设置缓存等。​在实践过程中,我们采用了一些实用的技巧,例如使用LIMIT子句、分页缓存等。

2425

如何优化 MySQL 深分页 SQL

这条 SQL 执行需要 5 秒左右,并且越往后翻页越慢,这就是典型的。所谓深分页,就是中的offset非常大。它的含义不是从开始查,而是:在满足的数据中,按照id排序,跳过前 4,999,990 条,然后取 10 条。也就是说,MySQL 需要先找到并跳过大量数据,最后只返回 10 条。越往后翻页,需要跳过的数据越多,查询也就越慢。在讲优化之前,我们先看几个基础概念。

m0_58809631的博客 438

SQL 优化实战总结:索引、深分页、JOIN、N+1 一次讲清

本文结合实际项目中接触过的 SQL 优化场景,对常见的性能问题做了一次梳理,主要包括执行计划分析、索引设计、索引区分度、深分页、JOIN、N+1 查询以及批量操作等内容。文章重点不在于总结固定的“优化口诀”,而是从扫描数据量、SQL 执行次数和实际耗时几个角度出发,理解 SQL 性能问题应该如何定位和分析,并结合具体场景选择更合适的优化方式。

2301_79472735的博客 526

SQL|使用游标分页优化深分页

业务场景:需要将有 500 万条记录的表 my_table 中的 content 字段取出。这显然需要分页取出,我们规定每一页取出 1000 条记录。

长行 3991

【sql效率优化】优雅地解决mysql深分页问题

1、当业务需要从表中查出大数据量时,而又项目架构没上ES时,可考虑使用标签记录法的方式,对查询效率进行优化。2、从需求上也应该尽可能避免,在大数据量的情况下,分页查询最后一页的功能。或者限制成只能一页一页往后划的场景。......

weixin_43770745的博客 1022
上一篇: 网络连接之队头阻塞!!!
下一篇: 唯一索引插入引发的死锁问题
高冷小伙
博客等级 码龄7年 223粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高冷小伙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值