关于分库分表的查询思考

2022-11-17 16:54:45 +08:00
 loveaeen

小弟最近在看关于数据在分库分页后的一些查询方式。 发现了有以下几种:

  1. 全局查询法的 limit 0,(x+y)大内存排序方式。
  2. 禁止跳页法的 id > x limit 10 的方式。
  3. 通过获取最小值的 offset ,在内存中排序后进行的二次查询法。

主要有些疑惑的是第三种 假设: 分了两张表 user_1,user_2 ,在单表中默认查询为 limit 5,5 该页数据数据因删除等操作导致全部存在 user_1 表中,user_2 表不存在该页数据。 那么在「二次查询法」中的初次查询时,sql 已经被改写为 limit 2,5 在初次查询就已经缺失数据的情况下,「二次查询法」怎么解决这种问题呢。

1465 次点击
所在节点    MySQL
5 条回复
xuanbg
2022-11-17 16:57:36 +08:00
分表规则必须要解决一个问题:你需要知道在哪个表查询目标数据。
loveaeen
2022-11-17 17:03:16 +08:00
@xuanbg 我知道我有两张 user 分表,我也采用「二次查询法」来归并排序分页数据,但是某一页数据却全部都存在 user_1 表中,「二次查询法」如何解决该问题呢?
我应该也没法提前知道这页数据具体在哪张表吧
zoharSoul
2022-11-17 17:17:45 +08:00
这跟分库分表没关系吧
xuanbg
2022-11-17 17:36:14 +08:00
@loveaeen 数据分布不均匀的话,查列表先表 1 再表 2 不好么?
pkoukk
2022-11-17 19:04:05 +08:00
既然有 limit offset ,那就是要分页咯,稳定分页就意味着必须排序
所以你的排序字段应该就是你的分表依据
如果排序和分表没关系,那只能多表查完合并大内存排序了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/895986

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX