1
oxromantic 154 天前
数据很大的话,显然不适合读到 list 里啊
|
2
assiadamo 154 天前
表很大的情况下忽略网络因素应该是数据库快,如果自己做还要关注数据占用内存过多导致 GC 问题
数据量小的情况下 jooq 有专门的库做这个 |
![]() |
3
HiShan 154 天前
数据库更快,数据量很大的情况,把数据从磁盘上加载到内存中考虑到磁盘 IO ,网络传输,还不如在数据库就把数据聚合好再传输
|
![]() |
4
RangerWolf 154 天前
我感觉哪个都不快。。。。 有科学计算库才快~
比如 python 的 pandas 实测比 MySQL join 快 (只要内存扛得住) https://www.flyml.net/2019/03/25/pandas 一个 pandas-vs-mysql-sql-的性能对比 / 以前的一个测试文章 很久没有用 JAVA ,提供一个参考思路,希望有帮助 |
5
ilylx2008 154 天前
也得看情况,大部分情况,用 in(id)比 left join 好
|
![]() |
6
RangerWolf 154 天前
刚才的 url 裂开了,看起来不能 decode
https://www.flyml.net/2019/03/25/pandas%e4%b8%80%e4%b8%aapandas-vs-mysql-sql-%e7%9a%84%e6%80%a7%e8%83%bd%e5%af%b9%e6%af%94/ 试试看这个 url |
![]() |
7
tmtstudio 154 天前
用 redis 啊
|
![]() |
8
rekulas 154 天前
严格来说没有正确答案,无论数据量大小多少,取决于你的数据结构,索引、磁盘、网络等情况,都可能出现不一致的结果。
例如:按楼上朋友的看法反例,数据量少可能 java 快,但实际生产中本来很快的查询因为 join 一个不合理的数据集导致速度骤降的现象并不少见(即使结果数据不大),这种情况把数据分别读出来处理反而更快 但设计合理的情况下,又可能 join 更快 所以没有标准答案 |
9
littlewing 154 天前
优先 MySQL
|
![]() |
10
bk201 154 天前
那你要列出 2 种方式的时间线对比了。io 是最花时间的,所以要比较 get a ,b 全数据和 get a ,b join 结果数据的时间花费。
|
11
chihiro2014 154 天前
=。=如果是 java ,你放到内存中处理,那你的内存不够,不是得炸?
|
![]() |
12
liprais 154 天前 via iPhone
一般你怎么优化也优化不过数据库,mysql 除外
|
13
Jooooooooo 154 天前
答案是服务器资源要远比数据库资源便宜, 能用服务器算的都用服务器算.
|
![]() |
14
notejava 154 天前
现实需求中,left join 后可能还需要各种过滤、排序,用 java 处理就很恶心了。我一般是直接 sql left join ,只要索引合理,不会慢。如果数据量实在太大,还可以分表。
|
![]() |
15
beichenhpy 154 天前
数据库快
|
![]() |
16
CEBBCAT 154 天前
我发这一层只是想提示,不能换用数据仓库吗?就让他慢慢跑着去呗
|
17
night98 154 天前
表数据大是多大?如果超百万行且频繁使用的话肯定读内存快,缺点是内存得巨巨巨巨大,不是频繁读且项目读写性能要求不高的情况下走 mysql 肯定划算点
|
![]() |
18
akira 154 天前
大部分情况下应该是 mysql 快
|
![]() |
19
xuanbg 154 天前
看最终结果集大小。如果结果集很小,绝对数据库快。结果集很大,数据库就没有优势了。
|
![]() |
20
teem 154 天前
正常逻辑肯定是数据库直接搞定。
|
![]() |
21
unco020511 154 天前
肯定是数据库啊
|
22
dqzcwxb 154 天前
用 hashMap 做数据拼接解决双重循环的笛卡尔积
|
23
liaojl 154 天前 via iPhone
在表结构、索引设计合理的情况下,你 Java 里怎么遍历都干不过 db ,毕竟 db 是专门干这个的。表数据很大的情况下,Java 里遍历还要考虑内存和 CPU 负载的问题。
|
![]() |
24
Nich0la5 153 天前
一般数据库快,能在数据库过滤的尽量在数据库层面操作,而且读那么大个 list 不怕 oom 吗
|
![]() |
25
msg7086 153 天前
看具体情况。
如果你访问量很大,单台 DB 压力大,那么把一部分压力转嫁到 app server 是一种可行的方案。 但是如果你 DB 压力不那么大,表连接当然速度更快。 (另外有一个常见的做法是先查出表外键然后再在第二张表上做 IN()拿到过滤数据,再合并结果。) |