我们公司不让开发使用 join 包括 left join,不让用子查询,合理吗?

2020-06-03 16:47:10 +08:00
 hackingwu

我们公司规范不让开发使用 join 包括 left join,也不让用子查询,原因是为了减轻 DB 的压力,这样就导致我们一个多表联合查询的业务就要拆分多条语句,导致无效的请求和数据传输。我们业务是微服务架构。 我觉得是很不合理的。减轻了 DB parse 的压力,却带来了处理请求和数据传输的压力。 大家觉得呢?是我错了吗?

32313 次点击
所在节点    程序员
231 条回复
liuxey
2020-06-03 19:17:27 +08:00
1. 看业务类型
2. 看谁职位大
3. 出问题谁背锅
ychost
2020-06-03 19:19:50 +08:00
离线计算的话,无所谓的
howellz
2020-06-03 19:27:21 +08:00
这还用啥 SQL 啊,SQL 的作用不就是在 db 层面帮你把这些优化做好么?自己在 Client 端写代码去优化整理?把数据库当空气?
sanggao
2020-06-03 19:29:47 +08:00
我可以正经告诉你,严格禁止 sql 联表查询,review 发现了你赶紧改去!
mandex
2020-06-03 19:41:09 +08:00
具体问题具体对待,有没有性能问题可以测试,为啥要全部禁用呢。
很多地方明明没有性能问题,不让用 JOIN 导致增加了工作量,并没有意义吧。
changdy
2020-06-03 19:45:29 +08:00
233 楼上说合理的....让人看不懂, 只能说这个由业务决定和系统架构决定
传统 erp join7~8 张表..再常见不过了...
如果系统的边界划分的非常清晰 , 业务方对查询的要求比较低 当然 join 尽量少....
newtype0092
2020-06-03 19:55:53 +08:00
关系型数据库禁止通过关系关联查询?我《数据库系统概论》白学了。。。
optional
2020-06-03 20:11:19 +08:00
合理。 互联网 otap 应用不应该用 join.
理由:缓存友好,方便 sharding,方便优化拆分。
optional
2020-06-03 20:13:12 +08:00
@newtype0092 其实数据库范式之类的都是面向传统软件的。
大流量的互联网应用都是拿数据库都 kv 用的。
opengps
2020-06-03 20:16:46 +08:00
如果你将来数据库达到跨 2 台以上机器,你立刻会改口说很合理!
这种规定说明制定规则的人出发点有分库思路,当然业务是否能达到用的上分库则是另一个话题
wangsd
2020-06-03 20:17:31 +08:00
现在公司搞 MES 的,join 十几张表都见过。
palfortime
2020-06-03 20:19:38 +08:00
我认为在大部分开发写代码都是复制 /粘贴模式,与实时系统有连接的数据库上都应该禁止 join 。业务做大后,这些语句都已经扩散到整个系统了,大部分领导没有这个魄力来改。

像我司 sql 一把梭,开发时那个爽,也不评估需求是否合理,反正一条 sql 可以处理。db 性能不够?买台核数更大的。
结果,我们的系统被客户采购部署过去时,Oracle 被要求换成 MySQL,核数也有上限。量上来之后,三五天一个炸,都不忍心看客户群里的消息。
hiboshi
2020-06-03 20:22:01 +08:00
非常合理 尤其是互联网业务
bsg1992
2020-06-03 20:30:28 +08:00
@optional 那你为什么不直接用 KV 用啥关系数据库呢?
你如何判断出一个应用在开发之前是大流量应用呢?
starcraft
2020-06-03 20:45:22 +08:00
哈哈哈 刷新认识。第一次见能把懒得学数据库优化 说的这么高大上。你们这帮人不当领导真是可惜了,做个螺丝钉写 crud 真是糟蹋你们。
yxjn
2020-06-03 20:49:30 +08:00
有的需求不用 join 根本做不了啊,比如说两个表联合查询,查询条件分布在两个表里。
或者按照题主说的分两步走。如果一个表 in 另一张表的数据,而另一张表查出来的数据又非常多。很容易造成 sql 过长,mysql 甚至执行不了,或者效率严重降低。
既然选择了关系型数据库,就要明白为什么选择它。
BigBrother1024
2020-06-03 20:58:28 +08:00
从不关系这类问题,有问题直接向公司提呀
whoami9894
2020-06-03 21:01:44 +08:00
那干脆别用关系数据库,不让跨表查询,换 NoSQL 存冗余数据
optional
2020-06-03 21:31:52 +08:00
@bsg1992 kv 确实很多啊,但是关系型数据库成熟的索引,读写分离之类的都很方便。只不过用 1+N 查询代替了 jion,但是后台管理,数据分析等 olap 还是大量用 join 的。
syasuker
2020-06-03 21:53:30 +08:00
OLTP OLAP 自己看

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

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

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

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

© 2021 V2EX