作者James610024 (JamesChen)
看板Database
标题[讨论] Join效能请益
时间Wed May 27 22:43:19 2020
小弟入行约一年,算有点前後端经验。
目前在工作上遇到问题,想请各前辈解惑。
我目前写前端,遇到需要的资料没有API时,
会开需求给我们後端工程师。
假设我今日要查询的是:
该名学生的班级、导师、导师教授科目,三种
在已知学生的id情况,查寻上述三种资料。
都为一对一,且必须依序查班级、导师、导师教授科目查询。
问题来了,
我的直觉是用学生id查询所属班级,并join导师及导师教授科目,用一个Request查询所
需资料。
後端工程师却觉得join很消耗DB效能,必须把效能留在新增删除修改这类的地方,要我多
发两次请求查询(导师、导师教授科目),对DB较无负担。
再者,请他分三次SQL查询,他说Java後端是同步语法,在等待SQL查询回来时Thread会卡
在那不做事,查三个很浪费时间。
然後我自己写SQL测试查询速度,发现不管有没有join资料表,查询速度皆差不到2ms
他的回应是join会使用更多的系统资源,所以查询速度会差不多
这里想请问,join真的很消耗效能吗?
备注:前端-vue,後端-Spring Boot,DB-PostgreSQL
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 124.218.32.84 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1590590601.A.21E.html
1F:推 criky: db有这麽脆弱吗?XD05/27 23:39
2F:→ yoche2000: 现在硬体这麽强 会有这麽大影响嘛 05/27 23:54
我心里的第一个os的确是这麽想,但觉得这会无限上纲
3F:→ dennisxkimo: 两种查询方式 用较多资源的 没超过 速度不会差太多05/27 23:58
4F:→ dennisxkimo: 随着资料量增长 当查询资源超过资源设定值 就有差了05/27 23:59
5F:→ dennisxkimo: 强大硬体 PG跑预设值 就浪费强大硬体资源 (个人见解)05/28 00:18
6F:→ AndCycle: 写错的架构才会消耗效能, 见过完全没index硬体硬干的db05/28 00:49
所以重要还是看DB设定还有SQL写法?
7F:→ dennisxkimo: 跑explain analyze分析一下罗05/28 06:47
他倒是有让我看Explain,但DB不做也是落到前端做,虽然是在使用者电脑,资料多的话
也怕前端处理慢
8F:推 LINGZ: 无须嘴炮,楼上说跑explain就知道无误05/28 07:00
※ 编辑: James610024 (115.82.227.109 台湾), 05/28/2020 09:16:31
9F:→ dennisxkimo: 前端挂一个挂 vs 後端DB挂 大家一起挂05/28 12:16
10F:→ dennisxkimo: 後端的想法会想到 大量使用端共同使用的消耗 不单只05/28 12:19
11F:→ dennisxkimo: 是一个查询而已05/28 12:19
是没错
12F:→ dennisxkimo: explain可以看出 你是不是超过DBA设定的资源是否超过05/28 12:20
13F:→ dennisxkimo: 超过的话pg会用到disk05/28 12:21
了解,我再试试,先感谢大大
既然提到多个请求,这边想再请问说:
如果原本一个请求可以解决变成三个请求,变相的後端server与DB都要额外执行两次处理
与查询,十位user就会乘10倍,等於server与DB多处理20个,这样应该怎麽衡量Request
数量与是否join table呢?
※ 编辑: James610024 (115.82.227.109 台湾), 05/28/2020 12:57:41
14F:→ dennisxkimo: 还要看架构吧 不能这样算 ,你的「再者」後面对方已 05/28 14:20
15F:→ dennisxkimo: 经讲明他的痛处了 05/28 14:20
好的,了解
※ 编辑: James610024 (115.82.227.109 台湾), 05/28/2020 16:47:20
16F:推 youtuuube000: 打3发请求不也是SQL查询三次吗? 06/03 04:06
17F:推 youtuuube000: 若他说data量太大我还能理解 还是我有什麽误会? 06/03 04:08
18F:推 laputaflutin: 发3次是在不同的session? connection也很珍贵欸 06/04 00:09