mysql解决深度分页的问题

limit深分页为什么会变慢?

例如:一条sql:

select id,name,age, from user where age >10 limit (10000,10);

首先这条sql肯定是比较慢的,因为它经过了很多次的回表。

sql执行流程:

1:先通过普通索引age,过滤掉age条件,找到符合条件的这10010条记录的id

2:通过这10010条记录的id找到id的叶子结点,取出对应的值(回表)

3:丢弃前10000条数据,留下最后10条,返回。

sql变慢的原因:

  1. limit语句会先扫描offset+n行,然后再丢弃掉前offset行,返回后n行数据。也就是说limit 100000,10,就会扫描100010行,而limit 0,10,只扫描10行。
  2. limit 100000,10 扫描更多的行数,也意味着回表更多的次数。

解决方案一:通过子查询优化

因为上面的sql,回表了100010次,但其实回表10次就够了,所以说只需要减少回表次数就够了。

到这个时候有些同学可能对于回表这个概念并不是很清楚,简单来说:从二级索引的叶子结点上只能查询到当前索引字段和id字段,然后根据查询到的id字段再去主键索引中查询(因为主键索引的叶子结点中存放的是整行数据)

那么看到这可能很多人就明白了,只需要将条件转移到主键索引树上就能够减少回表次数了。

所以我们只需要写一个子查询将id查询出来,然后将这个id作为主查询的where条件就ok了。

注意:子查询也不能过多的回表。

select id,sales_order_code,lift_code from `or_lift_item` where id > (select id FROM or_lift_item WHERE  create_time> '2023-06-03 10:25:51' limit 50000,1) LIMIT 10

这个查询效果是一样的,但是回表次数却减少到了10条,查询效率大大提高。

解决方案二: INNER JOIN 延迟关联

延迟关联的优化思路,跟子查询的优化思路其实是一样的:都是把条件转移到主键索引树,然后减少回表。不同点是,延迟关联使用了inner join代替子查询。

优化后的SQL如下:

select abc.id,abc.sales_order_code,abc.lift_code from `or_lift_item` abc JOIN (select a.id FROM or_lift_item a WHERE  a.create_time> '2023-06-03 10:25:51' ORDER BY a.create_time limit 40000,10) tbs ON abc.id = tbs.id

解决方案三: 标签记录法

limit 深分页问题的本质原因就是:偏移量(offset)越大,mysql就会扫描越多的行,然后再抛弃掉。这样就导致查询性能的下降。

其实我们可以采用标签记录法,就是标记一下上次查询到哪一条了,下次再来查的时候,从该条开始往下扫描。就好像看书一样,上次看到哪里了,你就折叠一下或者夹个书签,下次来看的时候,直接就翻到啦。

假设上一次记录到100000,则SQL可以修改为:

select id,sales_order_code,lift_code from `or_lift_item` where id > 100000 ORDER BY id LIMIT 10

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

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

相关文章

Ant-Design-Vue 动态表头并填充数据

在现代前端开发中,动态表格是一个常见需求,尤其是在处理大量数据和需要灵活展示时。Ant-Design-Vue 作为一个基于 Vue 的 UI 组件库,提供了强大的表格组件 a-table,使得实现动态表头和数据填充变得简单高效。本文将详细介绍如何使…

数据分析------统计学知识点(三)

相关性分析 1.趋势分析与散点图 散点图可帮助我们发现和理解变量间的关系,可直观观察是否有相关性。 (1)散点图定义及组成要素 散点图是一种以点的形式在直角坐标系上表示两个数值变量间关系的图表 横坐标(x轴)&a…

SQL小白10分钟快速入门

SQL(Structured Query Language)是一种用于管理关系型数据库的标准化编程语言。以下是SQL的入门基础教程,涵盖了一些基本概念和常用操作。 1. 数据库和表 数据库(Database):一个存储数据的容器。表&#…

【JavaScript脚本宇宙】领先的静态网站构建工具:全面对比

静态站点生成器大解析:找出哪一款最适合你 前言 本文将探讨六种不同的静态站点生成器和React框架,包括Gatsby,Next.js,Jekyll,Hugo,Hexo和Eleventy。这些工具各有特色,提供了丰富的功能和使用…

PEI转染试剂如何保存呢?

转染试剂是瞬时转染生产病毒载体的主要原材料之一。作为上游病毒生产的重要原物料之一,转染试剂对病毒载体的产能具有重要影响。而转染试剂的转染效率、稳定性都直接影响着大规模病毒载体生产的产能与周期。因此,了解PEI转染试剂正确的保存方法对于保障实…

实现k8s网络互通

前言 不管是docker还是k8s都会在物理机组件虚拟局域网,只不过是它们实现的目标不同。 docker:针对同一个物理机(宿主机) k8s:针对的是多台物理机(宿主机) Docker 虚拟局域网 K8S虚拟局域网 …

net::ERR_INCOMPLETE_CHUNKED_ENCODING 200

首先了解 proxy_buffers 是Nginx中用于配置代理服务器响应的缓冲区大小的指令,它对于优化Nginx服务器性能以及提升用户体验至关重要。通过合理设置proxy_buffers及其相关参数,可以有效地管理服务器资源,提高处理请求的效率,减少数…

借鉴与创新 台湾Apex齿轮减速机PII系列

台湾Apex Dynamics公司以其卓越的减速机技术,长期在全球机械传动领域占据着重要的地位。其中,齿轮减速机PII系列作为齿轮箱Apex基线的新成员,更是凭借其独特的性能和设计受到了广泛的应用。 APEX齿轮减速机PII系列在重量,尺寸&…

CANoe仿真工程Switch控件关联dbc信号出现的问题及解决思路

小白学习CANoe仿真,参考CANoe-第2个仿真工程-XVehicle—1总线数据库设计(思路)_canoe vehicle-CSDN博客 CANoe-第2个仿真工程-XVehicle1总线数据库设计(操作)_canoe factor 参数什么意思-CSDN博客CANoe-第2个仿真工程…

【计算机网络】对应用层HTTP协议的重点知识的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

mysql服务默认仅允许本机访问,其他计算机是无法远程连接的,如果您想远程连接mysql需要做一下操作

mysql服务默认仅允许本机访问,其他计算机是无法远程连接的,如果您想远程连接mysql需要做一下操作 打开命令行或终端,进入移动平台安装根目录,执行以下命令 windows:dbsvr\mysql\bin\mysql -P 4806 -u root -p linux&…

多语言接入淘宝API抓取淘宝数据库数据获取详情页信息评论数据等,打造个性化营销策略

在数字化时代,个性化营销已成为品牌与消费者建立联系的关键。淘宝API作为强大的工具,能够帮助商家深入挖掘消费者需求,实现精准营销。本文将探讨如何通过淘宝API提升营销效果,增强用户体验。 消费者洞察: 淘宝API提供丰…

深拷贝的实现方式

深拷贝的实现方式主要有以下几种,这些方式在处理不同的情况时各有优劣: 递归函数实现: 原理:通过递归的方式遍历对象的所有属性,如果属性是基本类型则直接复制,如果属性是引用类型 则继续递归拷贝。示例…

三.网络编程套接字_TCP

一.序言 在上一章中,我们已经实现了用udp来实现网络编程,这一节我们用tcp来实现网络编程,通过对比两者编写过程的区别,来加深对udp,tcp的理解! (两者其实差别不大!有了udp的基础,学习起来tcp会…

记录Object.defineProperty使用以及Proxy的使用

1.Object.defineProperty使用: // 本体 const obj1 {a: 1,b: 2,c: 3, };// 通过代理对象 来监听本体修改 const definePropertyObj {}; // 使用Object.defineProperty监听对象 for (const key in obj1) {Object.defineProperty(definePropertyObj, key, {get() {c…

按摩师 | 打家劫舍 | 删除并获得点数 | 动态规划

1.按摩师(打家劫舍 I) 题目连接:面试题 17.16. 按摩师 一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接。在每次预约服务之间要有休息时间,因此她不能接受相邻的预约。给定一个预约请求序列&am…

java基础filter servlet interceptor controller之间的关系

servlet Servlet是运行在Web服务器上的Java类。它们主要用于处理HTTP请求和响应。 Servlet可以接收来自客户端(例如浏览器)的HTTP请求并生成响应,这些响应通常是HTML页面、XML文档或其他格式的数据。Servlet通常被设计用来扮演Web应用的控制…

selenium 输入框、按钮,输入点击,获取元素属性等简单例子

元素操作 nput框 输入send_keys, input框 清除clear(), 按钮 点击click() 按钮 提交submit() 获取元素, tag_name、 class属性值、 坐标尺寸 """ input框 输入1次,再追加输入一次, 清除&#xff0c…

PyQt5学习系列之基础知识“字典”

PyQt5学习系列之基础知识——字典” 啰嗦字典使用字典取值与赋值其他使用 总结 啰嗦 在项目中使用到解析数据存放在字典中,对字典中的数据进行数据转化。即需要使用到字典,并对字典中的数据取值。 字典 一种可变容器模型存储任意类型对象每个键值对&am…

视频监控管理平台智能边缘分析一体机安防管理平台客流统计检测算法商场的场景应用方案

随着科技的不断发展,智能化技术已经广泛应用于各个领域。在商业领域,智能边缘分析一体机作为一种新兴的技术手段,为商场提供了一种高效、准确的客流统计方法。本文将探讨智能边缘分析一体机在商场客流统计中的应用方案。 商场作为人们日常生活…