关于复杂的多表关联查询,大家一般都是怎么处理的?

2020-02-27 15:55:47 +08:00
 misakarin
这几种方式:
1、将逻辑一次性通过 SQL 处理完
2、在代码中处理,分几次请求数据库
3、在代码中处理,数据库加冗余字段,减少请求数据库的次数

大家一般倾向哪一种,或者有没有更好的方式
4394 次点击
所在节点    程序员
22 条回复
noreplay
2020-02-27 15:59:24 +08:00
个人倾向于第一种。
waising
2020-02-27 16:02:01 +08:00
个人倾向于第二种,但实际情况是第一种
zuoakang
2020-02-27 16:03:31 +08:00
还好不是多库查询,多表多话,看执行速度吧,如果速度慢,可以考虑中间表吧
wd
2020-02-27 16:07:37 +08:00
取决于实际情况...
luoyou1014
2020-02-27 16:15:31 +08:00
没有性能压力,第一种和第二种没区别,用 3 就浪费工作量

有性能压力,第一种绝对不能用,会直接拖垮数据库,第二种仅能使用于一种情况,就是这个语句不是经常执行的,只是偶尔执行一下,例如在后台查看一些统计数据。

有性能压力,且查询量大,只能采用第三种办法。
zhaorunze
2020-02-27 16:21:29 +08:00
4.定时任务收集数据
leon0903
2020-02-27 16:49:24 +08:00
有分页要求的话 只能用第一种吧。
bbbai
2020-02-27 17:16:06 +08:00
倾向第一种。数据量过大的 实时性要求不高倾向于 #6 提出的第四种
akira
2020-02-27 17:17:16 +08:00
2 3
newtype0092
2020-02-27 17:18:32 +08:00
这几种方式都有存在的必要,没有一种方法能通吃所有场景。
laojiaqing
2020-02-27 17:20:48 +08:00
定时任务就不会有性能压力?
zhuangjia
2020-02-27 17:22:54 +08:00
倾向于第一种,实际第二种
目的是方便理解和修改……
Ministor
2020-02-27 17:44:16 +08:00
索引啊 es 之类的
silvermuse
2020-02-27 17:45:26 +08:00
从不用联表查询。。多数用二,请求频繁性能压力特别大的用三。
联表查询量稍微上来一点点就不行了,性能实在太差。
wzwwzw
2020-02-27 17:47:30 +08:00
不要求实时,用定时任务执行第一种,把结果存缓存。实时第二种。
loryyang
2020-02-27 19:43:28 +08:00
看你多复杂了,太复杂,用 1 的方法有时候会很慢,需要做专门的优化。如果速度 OK 的话,1 挺好的。为了省事,就 2 好了
另外,2 的查询还会涉及到原子性问题
loryyang
2020-02-27 19:44:30 +08:00
不少引擎对这种联合查询场景有专门的优化,不过不是万能的,稍微复杂一些就可能无法优化,而导致速度变得很慢
optional
2020-02-27 19:45:44 +08:00
没什么好争议的:
OLAP 场景 第一种,OLTP 场景 第二第三种。
opengps
2020-02-27 20:25:42 +08:00
为了程序简单选择 1
为了数据库能扩容,选择 2
zivyou
2020-02-27 20:30:01 +08:00
个人第一种用的多些。主要写起来优雅一些,性能要求也没那么高

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

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

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

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

© 2021 V2EX