惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
The Cloudflare Blog
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
V
Visual Studio Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
The GitHub Blog
The GitHub Blog
L
LangChain Blog
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs
博客园 - Franky
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
V
V2EX
MyScale Blog
MyScale Blog

博客园 - luckygxf

架构积累-系统划分 架构积累-软件架构终极目标 javascript构造方法 数据库连接池初始连接 分布式系统CAP理论(一) 数据库连接太多排查(一) 审批流程-节点自动审批通过 防表单重复提交 devops 对象存储迁移-组件上线 工作效率提升 新需求开发-重构老的逻辑 js析构赋值 框架的好处和不足 React框架Hello world 数据库表设计在哪个接口 需求实现-ddd四层架构实现 前端代码(一) 高内聚,低耦合 对象存储改造 mermaid初体验 业务逻辑优化-解决提示词问题打分不准 idea 插件envfile初体验 防盗链-防盗用链接 springboot项目启动小技巧 github托管网站 AI MCP开发 AI中 MCP 作用 mapconstruct 初体验 架构积累-解耦与防腐
深分页问题
luckygxf · 2026-05-28 · via 博客园 - luckygxf

做数据迁移,把一个200多万的表数据,迁移到另外一个表。需要把原来的读取出来,一次不能读取完,分页读取,使用mysql 的limit offset

这个表有自增主键、mnt_tm维护时间字段。mnt_tm有索引

开始我想着通过mnt_tm排序分页查询

select 
    xx, 
    yy
from 
    t1
order by 
    mnt_tm desc
limit 0, 100

后台定时分页查询,插入另外一张表

代码一上线,就有很多慢查询,超过2秒的

mnt_tm有索引,但是默认是升序的。这里可能会重排序,导致慢查询。

如果没有order by,运行久了也会有深分页的问题。limit 10000,10也会很慢,因为需要扫描前100000条数据。数据库节点数据大小不一样,不能像索引一样,直接随机访问。还有存储是离散存储的,不像数组一样在内存中是连续存储的,可以计算出随机访问的地址。

这里我了解到的几种解决方案

1. 按天查询

  看数据分布,每天最多只有2万多条数据。mnt_tm有索引,虽然时候分页查询,目的不一样,不是在页面展示,所以不用每页大小一致。解决实际问题为目标

2.使用子查询

  子查询找出id,然后关联。子查询查询id,索引覆盖,很快。找出一页id数据,在关联,就页大小 * 每条数据查询时间

还有其他的游标之类的。可以问下大模型。

几年前我面试的时候,也遇到这个问题,今天才基本了解清楚问题原因和解决方案