分库分表优化 禁用跨页查询

简介: 【7月更文挑战第6天】

一张表上面有 70% 的数据,但是另一张表上只有 30% 的数据,那么在 LIMIT 10 OFFSET 100 的场景下,可以在 70% 的表里取 LIMIT 7 OFFSET 70,在 30% 的表里取 LIMIT 3 OFFSET 30。所以,也可以把前面平均分配的方案看作是各取 50% 的特例

那如何知道一张表上有70%的数据,另外一张表上有30%。
在开发的时候先用SQL在不同的表上执行一下,看看同样的WHERE条件下各自返回了多少数据,就可以推断出来了。
不过实际上,能够接受不精确的业务场景还是比较少的。所以我们还有一种业务折中的解决方案,它精确并且高效,也就是禁用跨页查询方案。

只允许用户从第0页开始,逐页往后翻,不允许跨页。
假如业务上分页查询是50条数据一页,那么发起的查询依次是:

SELECT * FROM order_tab ORDER BY id LIMIT 50 OFFSET 0
SELECT * FROM order_tab ORDER BY id LIMIT 50 OFFSET 50
SELECT * FROM order_tab ORDER BY id LIMIT 50 OFFSET 100
...

不断增长的只有偏移量,如何控制住这个偏移量呢?
答案是根据ORDER BY的部分来增加一个查询条件。上述例子里的order by是根据id升序排序的,只需要在where部分增加一个大于上次查询的最大id的条件就可以了。max_id是上一批次的最大id

SELECT * FROM order_tab WHERE `id` > max_id ORDER BY id LIMIT 50 OFFSET 0

即使order by里使用了多个列,规则也是一样的

总体来看,回答要分成两部分,第一部分介绍基本做法,关键词是拿到上一批次的极值

目前比较好的分页做法是禁用跨页查询,然后在每一次查询条件里加上上依次查询的极值,也就是最大值或者最小值。

目录
相关文章
|
5月前
|
存储 自然语言处理 Cloud Native
云数据仓库ADB问题之全文索引检索字段过长时条件会失效如何解决
云数据仓库AnalyticDB是阿里云提供的一种高性能、弹性扩展的云原生数据仓库解决方案;本合集将深入探讨ADB的架构、性能调优、数据管理和应用场景等,以及如何解决在使用过程中可能出现的问题,提高数据仓库的使用效率。
124 4
|
NoSQL 关系型数据库 MySQL
MongoDB 慢查询语句优化分析策略
MongoDB查询语句太慢了,开启 Profiling 功能进行分析后发现,问题其实很好解决,涨知识了
489 0
|
6天前
|
存储 关系型数据库 MySQL
MySQL索引失效及避免策略:优化查询性能的关键
MySQL索引失效及避免策略:优化查询性能的关键
27 3
|
5月前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
625 0
|
5月前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
207 0
|
5月前
|
缓存 关系型数据库 MySQL
如何优化MySQL数据库查询性能
MySQL是一款常用的关系型数据库,但在实际使用过程中,由于数据量增加和查询操作复杂度增加,会导致查询性能下降。本文将介绍一些优化MySQL数据库查询性能的方法。
|
5月前
|
缓存 数据库 开发者
构建高性能的数据库查询语句优化策略
数据库查询是开发过程中常见的性能瓶颈之一。本文将介绍构建高性能数据库查询语句的优化策略,包括索引的设计与使用、查询语句的编写技巧、连接的优化等方面,帮助开发者提升数据库查询的效率和响应速度。
|
5月前
|
存储 缓存 Java
使用@Cacheable,缓存优化的方式优化数据库的查询
使用@Cacheable,缓存优化的方式优化数据库的查询
359 0
|
SQL 算法 Java
自定义水平分库分表策略【hint分片】
自定义水平分库分表策略【hint分片】
|
关系型数据库 MySQL 数据库
MySQL数据库索引的原理和优化策略
MySQL数据库索引的原理和优化策略
下一篇
无影云桌面