mysql 直接 select sum(amount) from .... 和先 select amount from ... 然后用 Java 求和有什么区别吗?

2020-08-13 15:55:12 +08:00
 MeloForsaken

如题,在内存使用和速度上有什么区别

4725 次点击
所在节点    程序员
36 条回复
jjplay
2020-08-14 08:24:45 +08:00
数据库不计算,后端不计算,全部丢到前端 去计算,嘿嘿
VeryZero
2020-08-14 09:02:45 +08:00
一个增加数据库 cpu 压力
一个增加服务器 cpu 和 io 压力

没有绝对答案吧,根据情况选咯
hand515
2020-08-14 09:06:52 +08:00
网络传输的消耗 对比 求和的那点计算量,我觉得还是让数据库 sum 好
Egfly
2020-08-14 09:36:47 +08:00
如果能让 db 使用 sum 的时候产生瓶颈,那得多少数据?网络传输耗时估计也很久
angryfish
2020-08-14 09:47:44 +08:00
如果单纯讨论 sum,那肯定是数据库算好。
chaleaoch
2020-08-14 09:51:36 +08:00
网络传输也是很大的开销. 选 1. 或其他方案.
xuanbg
2020-08-14 10:19:47 +08:00
@harde 1 万行数据全读到内存,IO 压力不要考虑的吗?
xcstream
2020-08-14 10:33:57 +08:00
数据量大于内存时候 第二种会爆
qile1
2020-08-14 12:29:03 +08:00
计算 sum,肯定比,先把数据找到,然后拼接好反会个程序 运算量,io 利用率少
Aresxue
2020-08-14 12:34:38 +08:00
前者计算是放在数据库进程,后者计算是放在应用进程,后者会浪费很多内存,前者会对数据库产生威胁,你要保大还是保小?
realpg
2020-08-14 12:38:41 +08:00
真正当做一个问题来做,那就要看业务模型和预期数据量。

如果是 1000 条数据以内,那怎么搞都行
如果是 100000 条数据以内,那直接让数据库算了吧
如果是 100000 条数据以上,那就要看数据库服务器的计算能力会不会产生瓶颈,这个请求的请求量等等


如果是一亿以上,或者 100000 条以上的带复杂逻辑的,那么,在别处进行冗余,依赖 insert update 的触发器进行更新,将集中计算分散化分布化
wqawd520
2020-08-14 15:10:55 +08:00
说句不好听得话,如果 mysql 连一般得 sum 求和都要放到后端来做,我看还是换数据库把,如果你得 sum 求和得 sql 实在不好写,把数据查出来在后端做,没什么问题。select sum(amoun) from xxx 这在 oracle 和 sqlserver 都不算问题。
greatbody
2020-08-14 21:31:57 +08:00
楼主其实是想问,如何优化 sum()函数的性能。

答案是换服务器
chihiro2014
2020-08-14 21:59:03 +08:00
@greatbody 有钱能使磨推鬼
zhangysh1995
2020-08-15 17:17:55 +08:00
第一个,算完返回。
第二个,拿出来数据交给 Java, 放到内存,Java 处理。噔噔蹬。。。
goodboy95
2020-08-15 19:25:50 +08:00
如果 sum 换成 count 的话,楼主还会纠结吗?(暂时仅考虑 InnoDB 引擎)
如果不纠结的话,那么,sum 比 count 多耗的那点资源可以忽略不计。

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

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

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

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

© 2021 V2EX