分库分表下的分页查询,到底怎么搞?

分库分表下的分页查询,到底怎么搞? 来自juejin.cn/post/7546324539988639790推荐一个程序员编程资料站http://cxyroad.com副业赚钱专栏https://xbt100.top2024年IDEA最新激活方法后台回复激活码CSDN免登录复制代码插件下载CSDN复制插件以下是正文。今天聊一个分库分表后的经典难题分页查询。很多伙伴在面试或者工作里都被问过这个问题如果没理清楚容易一头雾水。那我们就用最简单的大白话把它捋清楚说明白。1. 不是所有场景都需要分页方案分页问题只有在 跨库或跨表查询 时才会变复杂。举个例子如果查询条件里总是带 分片键比如查某个用户ID的数据或者查某个时间片的数据那它就是查某一个分片的数据。这种情况和查单表一模一样不存在什么分页难题。所以第一步一定要问这次查询到底是不是跨分片的2. 三种主流解决方案当我们真的遇到跨分片分页时常见的有三种办法3. 全局查找法的真相面试中最喜欢问的就是方案2里提到的 全局查找法。原理图问题正确性没问题但如果查询第 100,000 页每个分片要查几十万甚至上百万条数据。内存里还要排序和裁切。极容易 OOM内存溢出速度慢到怀疑人生。所以全局查找法能用但翻页浅一点还行深度翻页会死。4. 优化禁止跳页顺序翻页更香解决深度翻页问题的最佳实践是基于上一页最大 ID 翻页。做法第 1 页SELECT * FROMtableORDERBYidLIMITsize;第 2 页SELECT * FROMtableWHEREid {上一页最大id} ORDERBYidLIMITsize;优点每次只查一页性能极好。和 offset 大小无关不怕深度翻页。缺点不能直接跳到第 100 页。只能一页一页往下翻像刷微博/抖音一样。但对大多数场景信息流、消息列表完全够用。5. 不推荐的方案二次查询法有些文章会提到“二次查询法”。 它实现复杂还可能遇到数据分布不均的问题结果不可靠。一句话不推荐使用。6. 面试怎么答STAR 法则如果在面试被问到可以按 STAR 模型来回答S情境系统做了分库分表后跨分片分页成了难题。T任务需要一个能保证全局分页正确性的方案。A行动首先评估业务能不能限制查询范围直接规避问题。如果必须实现首推用Elasticsearch/TiDB这类系统。如果必须在数据库层面搞就用ShardingSphere的全局查找法但要说明深度翻页问题。针对深度翻页再提出“基于上一页最大ID”的优化。R结果既能满足业务需求也能保证性能稳定性。总结不是所有分库分表都有分页问题只有跨分片才需要考虑。常见三类方案中间件/数据库推荐开源框架方便但有性能坑业务妥协直接回避全局查找法能用但深度翻页会炸。最佳实践禁止跳页 顺序翻页。一句话总结能规避就规避能交给专用系统就交给专用系统实在要做就用连续翻页。END推荐阅读副业赚钱推荐让你的时间开始变现免费体验AI图片生成就在 Image Generator Hub程序员在线工具站cxytools.com 推荐一个自己写的工具站https://cxytools.com专为程序员设计包括时间日期、 JSON处理、SQL格式化、随机字符串生成、UUID生成、文本Hash...等功能提升开发效 率。 ⬇戳阅读原文直达 朕已阅