[求教] 阿里 Java 编程规范:避免使用 IN。 那这个业务场景不用 IN 还有什么好方案么?

2021-05-31 10:57:13 +08:00
 bubuXiaoqi

公司里面有 10W 个客户,员工 A 负责其中 2W 个客户。 (数据在用户库里面)

现在 员工 A 要查询 [自己负责的所有客户] 的实时交易明细。(数据在订单库里面,和用户库是两个实例)

目前的方案是查这 2W 的客户的 ID,然后在交易明细里面进行客户 IDS 的过滤。

但是这样 IN 的内容就特别大,而且可能还会变大。今天看到 JAVA 编程规范里面说避免使用 IN,那这样还有什么好办法么。

因为 员工看自己负责的客户的 账户、订单、交易、等业务表太多太多了。每个表目前都是 in ids 的方案。

6899 次点击
所在节点    MySQL
64 条回复
myCupOfTea
2021-06-02 10:15:28 +08:00
@opengps 举个例子看看,有点没理解怎么转化的 QAQ
zhozho
2021-06-02 10:41:01 +08:00
不是,我是这么理解的哈,前端页面上分两步,先客户表查员工 A 负责的客户列表,然后员工想看哪个客户的交易明细单独 where 查就是了。

实际场景有一下看那么多客户交易的的嘛,想到一个导出,导出也不能全部导出吧。

我觉得避免 in,就先避免查所有
bubuXiaoqi
2021-06-02 17:48:55 +08:00
@opengps 不用 join 第一是因为不在一个数据库实例 第二是因为 员工-标签-客户 已经是 4 5 个表的关联。这一块是可以缓存数据的。 全在数据库查的话 关联的就更多了 而且也看起来可读性很差。 实在要关联还得再单独维护一张员工->客户 IDS 的表。
QiangZai
2021-06-11 16:17:31 +08:00
不能利用 存储过程吗 ? 创建临时表 ?

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

https://tanronggui.xyz/t/780277

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

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

© 2021 V2EX