分库分表优化:平均分页

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

看到分页查询的第一个念头应该是:能不能在不同的表上平均分页查询数据,得到的结果合并在一起就是分页的结果
例如,查询中的语句是这样的

SELECT * FROM order_tab ORDER BY id LIMIT 4 OFFSET 2

因为本身有两张表,可以改成这样

SELECT * FROM order_tab_0 ORDER BY id LIMIT 2 OFFSET 1
SELECT * FROM order_tab_1 ORDER BY id LIMIT 2 OFFSET 1

在每一张表都查询从偏移量1开始的2条数据,那么合并在一起就可以认为从全局的偏移量2开始的4条数据。
图里我们能够看出来,按照道理全局的 LIMIT 4 OFFSET 2 拿到的应该是 3、4、5、6 四条数据。但是这里我们拿到的数据却是 2、4、5、9。这也就是这个方案的缺陷:它存在精度问题。也就是说,它返回的数据并不一定是全局最精确的数据

那么这个方案是不是就不能用了呢?并不是的,在一些对顺序、精度要求不严格的场景下,还是可以用的。例如浏览页面,你只需要返回足够多的数据行,但是这些数据具体来自哪些表,用户并不关心。
关键词就是平均分页

在一些可以接受分页结果不精确的场景下,可以考虑平均分页的做法。举个例子来说,如果查询的是 LIMIT 4 OFFSET 2,并且命中了两张目标表,那么就可以考虑在每个表上都查询 LIMIT 2 OFFSET 1。这些结果合并在一起就是 LIMIT 4 OFFSET 2 的一个近似答案。这种做法对于数据分布均匀的分库分表效果很好,偏差也不大

这个方案还有一个进阶版本,就是根据数据分布来决定如何取数据。

更加通用的做法是根据数据分布来决定分页在不同的表上各自取多少条数据。

目录
相关文章
|
存储 SQL 关系型数据库
大数据量下数据库分页查询优化方案汇总
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。
431 2
|
3月前
|
存储 缓存 关系型数据库
如何优化大表的查询速度?
本文介绍了优化大数据表查询速度的方法。关键点包括:1) 创建索引以加快查询;2) 优化查询语句,避免全表扫描;3) 使用缓存来提高查询效率,利用内存访问速度快和IO操作少的优势;4) 提升硬件配置,如使用固态硬盘和增加内存;5) 数据归档和分离,减少主表数据量;6) 实施数据库分片,如分库分表技术,以分散数据并提高并发性能。分库分表包括只分库、只分表(横向和纵向)以及两者结合,常见的分库分表中间件有ShardingSphere、MyCAT、TDDL和Vitess。这些策略通常结合使用,以应对大数据量查询的挑战。
147 1
|
3月前
|
缓存 关系型数据库 MySQL
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
MySQL 查询优化:提速查询效率的13大秘籍(索引设计、查询优化、缓存策略、子查询优化以及定期表分析和优化)(中)
264 0
|
3月前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
144 0
|
3月前
|
SQL 存储 关系型数据库
深分页怎么导致索引失效了?提供6种优化的方案!
深分页怎么导致索引失效了?提供6种优化的方案!
|
3月前
|
SQL 关系型数据库 MySQL
MySQL 百万级数据量分页查询方法及其优化
MySQL 百万级数据量分页查询方法及其优化
160 0
|
JavaScript 前端开发 API
【项目数据优化三】长列表数据优化
【项目数据优化三】长列表数据优化
109 0
|
存储 缓存 关系型数据库
更快的查询 | MySQL百万数据优化(索引调优)
mysql百万数据查询优化, 索引调优, 索引失效等问题 , 这篇文章来为你解答
289 0
|
SQL 存储 canal
当数据量达到百万级别的时候,分页该如何处理?
当数据量达到百万级别的时候,分页该如何处理?
384 0