17

Java 遍历 list<map> 实现 left join 快,还是 MySQL left join 速度快

 2 years ago
source link: https://www.v2ex.com/t/822661
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  程序员

Java 遍历 list<map> 实现 left join 快,还是 MySQL left join 速度快

  djs19920210 · 23 小时 18 分钟前 · 1906 次点击
从 mysql 数据库中读出 a,b 表,得到两个 list<bean> listA,listB,对这两个 list 做遍历实现 left join,
还是直接 sql 语句 left join 从 mysql 中查询等到结果集,
在表数据很大的情况下,这里两种方式,哪种快
24 条回复    2021-12-17 14:36:51 +08:00

oxromantic

oxromantic      23 小时 15 分钟前

数据很大的话,显然不适合读到 list 里啊

assiadamo

assiadamo      23 小时 14 分钟前

表很大的情况下忽略网络因素应该是数据库快,如果自己做还要关注数据占用内存过多导致 GC 问题
数据量小的情况下 jooq 有专门的库做这个

HiShan

HiShan      23 小时 12 分钟前

数据库更快,数据量很大的情况,把数据从磁盘上加载到内存中考虑到磁盘 IO ,网络传输,还不如在数据库就把数据聚合好再传输

RangerWolf

RangerWolf      23 小时 11 分钟前

我感觉哪个都不快。。。。 有科学计算库才快~
比如 python 的 pandas 实测比 MySQL join 快 (只要内存扛得住)
https://www.flyml.net/2019/03/25/pandas 一个 pandas-vs-mysql-sql-的性能对比 /
以前的一个测试文章

很久没有用 JAVA ,提供一个参考思路,希望有帮助

ilylx2008

ilylx2008      23 小时 10 分钟前

也得看情况,大部分情况,用 in(id)比 left join 好

tmtstudio

tmtstudio      23 小时 7 分钟前

用 redis 啊

rekulas

rekulas      23 小时 5 分钟前

严格来说没有正确答案,无论数据量大小多少,取决于你的数据结构,索引、磁盘、网络等情况,都可能出现不一致的结果。
例如:按楼上朋友的看法反例,数据量少可能 java 快,但实际生产中本来很快的查询因为 join 一个不合理的数据集导致速度骤降的现象并不少见(即使结果数据不大),这种情况把数据分别读出来处理反而更快

但设计合理的情况下,又可能 join 更快

所以没有标准答案

littlewing

littlewing      23 小时 1 分钟前

优先 MySQL

bk201

bk201      22 小时 58 分钟前

那你要列出 2 种方式的时间线对比了。io 是最花时间的,所以要比较 get a ,b 全数据和 get a ,b join 结果数据的时间花费。

chihiro2014

chihiro2014      22 小时 47 分钟前

=。=如果是 java ,你放到内存中处理,那你的内存不够,不是得炸?

liprais

liprais      22 小时 44 分钟前 via iPhone

一般你怎么优化也优化不过数据库,mysql 除外

Jooooooooo

Jooooooooo      22 小时 18 分钟前

答案是服务器资源要远比数据库资源便宜, 能用服务器算的都用服务器算.

notejava

notejava      22 小时 4 分钟前

现实需求中,left join 后可能还需要各种过滤、排序,用 java 处理就很恶心了。我一般是直接 sql left join ,只要索引合理,不会慢。如果数据量实在太大,还可以分表。

beichenhpy

beichenhpy      19 小时 17 分钟前

CEBBCAT

CEBBCAT      18 小时 30 分钟前

我发这一层只是想提示,不能换用数据仓库吗?就让他慢慢跑着去呗

night98

night98      18 小时 6 分钟前

表数据大是多大?如果超百万行且频繁使用的话肯定读内存快,缺点是内存得巨巨巨巨大,不是频繁读且项目读写性能要求不高的情况下走 mysql 肯定划算点

akira

akira      16 小时 54 分钟前

大部分情况下应该是 mysql 快

xuanbg

xuanbg      14 小时 5 分钟前

看最终结果集大小。如果结果集很小,绝对数据库快。结果集很大,数据库就没有优势了。

teem

teem      7 小时 47 分钟前

正常逻辑肯定是数据库直接搞定。

unco020511

unco020511      7 小时 34 分钟前

肯定是数据库啊

dqzcwxb

dqzcwxb      7 小时 15 分钟前

用 hashMap 做数据拼接解决双重循环的笛卡尔积

liaojl

liaojl      5 小时 24 分钟前 via iPhone

在表结构、索引设计合理的情况下,你 Java 里怎么遍历都干不过 db ,毕竟 db 是专门干这个的。表数据很大的情况下,Java 里遍历还要考虑内存和 CPU 负载的问题。

Nich0la5

Nich0la5      3 小时 5 分钟前

一般数据库快,能在数据库过滤的尽量在数据库层面操作,而且读那么大个 list 不怕 oom 吗

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK