什么是limit 深分页问题?怎么解决?

news/2025/1/6 7:09:18/

什么是limit 深分页问题?怎么解决?
select * from table order by key limit 10;
select * from table order by key limit 9999, 10;
我们想到给这个要排序的字段加上索引,但是加上索引之后,查询的速度依旧很慢。
当深分页的时候,优化器都不会选择走key这个辅助索引了,而是选择type = All,全表扫描,因为优化器这时候觉得,你走辅助索引,还要大量的回表,可能效率还不如直接全表扫描 + 排序呢。
为什么深分页慢呢?
因为深分页,会有很多不必要,没有意义的回表操作。我只要第9999页的记录,但是第 9998,9997…页的记录也都会进行回表操作。
从sql角度优化:
select * from table where key >=
(select key from table order by key limit 9999, 1)
// 利用索引覆盖特性查找第9999页的第一条记录,type = index,extra = using index
order by key limit 10;
// 走key的索引,快速定位,然后再往后取10条记录就行了,type = range,extra = using where
从业务角度优化:
连续翻页,可以利用上一页的最后一条记录的字段值,作为下一页的查询的起始值,可以减少一次子查询。
这时你就明白了,为什么有的地方UI只有上一页,下一页了吧。没有可以跳转的页数,给用户点击。
还有移动端的滚动加载,上拉加载下一页也是基于这个思路优化的。
还可以省去 count(*) 计算总页数的过程
select * from table where key >
上一页最后一条记录的字段值
order by key limit 10;
但是存在一个问题:还需要考虑出现大量重复数据的情况,在后续页的查询需要增加偏移量的处理
但是这样的设计真的有必要,有意义吗?用户真的会没事来查询第1万页的数据吗?
美年达大佬提供的调优方案:
先通过子查询拿到第99000页的所有记录的id值,然后和原表进行一次join表连接,比对id值,减少大量的回表操作。
select * from order_info as o
join (select id from order_info where period = 202207 order by modified desc limit 99000, 1000)
as temp on temp.id = o.id order by modified;


http://www.ppmy.cn/news/76272.html

相关文章

Python统计学13——回归的多重共线性、异方差、自相关的检验

在基础统计学,或者是计量经济学里面,需要对回归问题进行一些违背经典假设的检验,例如多重共线性、异方差、自相关的检验。这些检验用stata,r,Eviews什么都很简单,但是用python很多人都不会。下面就带大家实…

shell 脚本命令

文章目录 一.sort命令实验 二.uniq命令命令演示 三.tr命令命令演示 四.cut命令命令演示 五.split命令六.paste命令实验演示 七.eval命令 一.sort命令 以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序比较原则是从首字符向后,依次按ASCII码…

飞浆AI studio人工智能课程学习(3)-在具体场景下优化Prompt

文章目录 在具体场景下优化Prompt营销场景办公效率场景日常生活场景海报背景图生成办公效率场景预设Prompt 生活场景中日常学习Prompt: 给写完的代码做文档 将优质Prompt模板化Prompt 1:Prompt 1:Prompt 2步骤文本过长而导致遗失信息的示例修改后 特殊示例 如何提升安全性主要目…

【敬伟ps教程】自由变换

文章目录 自由变换 自由变换 变换可以针对整个图层(组或链接图层),或者选区内 基本操作 编辑–自由变换(CtrilT); 自由变换的控件框来控制变换的效果; 自由变换是独立进行操作的模式,操作结束后需要点击确…

【数据结构与算法】基础数据结构

文章目录 数组概述动态数组二维数组局部性原理越界检查 链表概述单向链表单向链表(带哨兵)双向链表(带哨兵)环形链表(带哨兵) 队列概述链表实现环形数组实现 栈概述链表实现数组实现应用 双端队列概述链表实…

mybatis是如何集成到spring的之托管mapper接口

前言 mybatis集成到spring可以参考spring mvc集成mybatis进行数据库访问 &#xff0c;其中mybatis集成到spring最重要的两个配置分别是SqlSessionFactoryBean和MapperScannerConfigurer&#xff0c;如下所示&#xff1a; <!--mybatis sqlSeesionFactory配置--><bean…

如何提升 linux服务器的安全性

及时更新软件&#xff1a;定期更新操作系统和软件包&#xff0c;以修复安全漏洞和错误。使用自动化工具来协助管理和更新软件包。确保定期检查系统是否有未安装的安全补丁&#xff0c;并及时安装它们。 安装防火墙&#xff1a;使用防火墙来限制入站和出站流量&#xff0c;只允…

DevOps系列文章-Kubernetes实现CI与CD配置

Kubernetes实现CI与CD配置 一、基本介绍 基于 Kubernetes 实现 CI/CD 配置&#xff0c;其实和往常那些 CI/CD 配置并没有太大区别。都是通过 提交代码&#xff0c;拉取代码&#xff0c;构建代码&#xff0c;发布代码来实现的。 只不过要是通过 K8s 来实现的话&#xff0c;则是…