
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 你是拿 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 分片 = = |