1
brezp 2022-02-23 16:55:35 +08:00
等一个回复
|
2
ChovyChu 2022-02-23 16:58:51 +08:00
没用过 shardingjdbc ,但是从你的描述看,我怎么觉得挺正常的,shardingjdbc 他也不知道是不是只有一条符合条件的数据,所以查完所有表不是正常的吗?可以考虑 limit 1 试试?只是瞎扯扯
|
3
xiao109 2022-02-23 17:00:31 +08:00 1
你是拿 userid 分的表,但是查是根据 order_id 。当然要把所有的表都走一遍
|
4
brezp 2022-02-23 17:02:08 +08:00
查询条件带上你的分片字段, 才能指定查某一个分片
|
5
james2013 2022-02-23 17:30:35 +08:00
userid 分片字段必须存在并且放在第 1 个位置,才能只查特定的 1 个表
select xx from order where userid={userId} and id = {order_id} |
6
issakchill 2022-02-23 17:33:09 +08:00
应该是无解的,查询非分片字段,就是要所有表走一遍
|
7
cheng6563 2022-02-23 17:33:10 +08:00
limit 1 应该就查到结果就立即 return 了
|
8
mcfog 2022-02-23 18:29:14 +08:00
假设支持你说的功能,那么这个查询就必须串行进行,单次查询的时延 99 线放大 128 倍,平均值放大 64 倍
|
9
agzou 2022-02-24 08:41:43 +08:00
分区 key 是 userid ,你用 order_id 去查,肯定是全表扫,并没有命中分区
|
10
mango88 2022-02-24 10:15:52 +08:00
缺少分片 key ,当然是扫全表了...
|
11
Chinsung 2022-02-24 11:43:20 +08:00
不带分片 key ,当然扫全表了。
要么先查出来分片 key ,用分片 key 挨个查。 要么再搞个数仓,去数仓查 要么异构索引表 |
12
Graves OP @ChovyChu @cheng6563 测试了一下,加了 limit1 没有效果
@xiao109 @brezp @james2013 @issakchill @agzou @mango88 @Chinsung 确实加了分片的 id 就会扫其中一个表的数据,order_id 用 snowflake 做了分布式 id ,在所有分表中是唯一的,扫全表我能理解,我感觉 sharding 是不是可以加个可配置项,在扫的过程中找到了就 return 不再继续去扫了,还是说我分片的姿势不对,应该拿 order_id 去做分片比较合理。 @mcfog 不太理解你的意思,我需求就是 order_id 是唯一的,扫表找到了就返回结果,然后不要再继续剩下的表。 |
14
slomo 2022-03-15 17:39:03 +08:00
如果有资源那就再冗余一份数据用 orderId 分片 = =
|