为什么很多人连基础的 SQL 都写不好,却开口闭口就是缓存架构分布式?

2021 年 9 月 2 日
 wh469012917

说下情况,我们公司同个部门的好几个同事,连个基础的 SQL 都写不好,代码中一堆数据库 N+1 的问题,连个 WHERE IN 查询都不会用,涉及到批量查询,都是遍历然后一条条的去跑 SQL,同一个方法重复查询了好几次,数据库设计更是不行,外键都是用逗号分隔拼接成字符串,然后保存到主表上。

正因为 SQL 写的烂,所以接口性能很差劲,但是他们好像都不在意这些 IO 方面的优化,整天在想着怎么优化语言性能,比如反射、JSON 序列化、语言基础库的性能;要么就是上集群、加缓存,然后又没有任何设计模式,直接业务代码中强硬加入缓存读写,就算是缓存也是先从缓存读出数据,然后遍历一条条去数据库再查出来,性能更差了

其实整体项目量不大,好好写好 SQL,基本上能搞定 90% 的性能问题了,大部分的开发经验也都好几年了,不至于这种基础知识点不懂,可为啥就是不重视 SQL 性能

21316 次点击
所在节点    程序员
206 条回复
zhuichen
2021 年 9 月 3 日
主要是看你们部门 leader 怎么看这个问题,如果 care 的话,你就可以提出来,就有机会发展,不过这么久了,我估计大概率不 care,久而久之就这样了
adoal
2021 年 9 月 3 日
这就是所谓的“互联网公司”
pcmgr456
2021 年 9 月 3 日
@l00t 中枪了😂
lanlanye
2021 年 9 月 4 日
看完两页希望有人来解个惑:为什么说数据量大的场景下联表会有坑?有的话常用的解决方式是什么?
wellsc
2021 年 9 月 4 日
报我身份证得了
wqtacc
2021 年 9 月 4 日
wellsc
2021 年 9 月 4 日
啊不对 我对“天在想着怎么优化语言性能,比如反射、JSON 序列化、语言基础库的性能;要么就是上集群、加缓存,然后又没有任何设计模式” 也是很方案,后端还是操作系统更重要的,而不是编译原理
dcoder
2021 年 9 月 4 日
@wellsc 就是被楼主 @wh469012917 吐槽的同事么?
vishun
2021 年 9 月 4 日
@l00t
先在考试成绩表中查找分数大于 80 的按用户分组的个数,然后再和科目总个数比较?
```
select user_id from (
select count(*) as num,user_id from 成绩表 where score >80 group by user_id
) as t
where t.num = (select count(*) from 科目表)
```
xuanbg
2021 年 9 月 4 日
@l00t 这貌似和科目表没啥关系啊。。。

select s.name from score a
join student b on b.id = a. student_id
group by a.student_id
having min(a.score) > 80;
cnbattle
2021 年 9 月 4 日
想知道 lz 理解的基础的 SQL 包含哪些? 我目前基本不用子查询 jion 以及视图 存储过程啥的
crazycarry
2021 年 9 月 4 日
你接触的太少,c 端基本就是查询 es 或者 redis 的数据了
xingheng
2021 年 9 月 4 日
@Actrace #100 什么坑? 用不好是人和流程的问题。
fengpan567
2021 年 9 月 4 日
@xuanbg 是不是得把 name 加到 group by 里额
wellsc
2021 年 9 月 4 日
@dcoder
JasonLaw
2021 年 9 月 4 日
@l00t #117 可以的话,把表结构发出来一下
snw
2021 年 9 月 4 日
@xuanbg
*所有科目*成绩在 80 分以上
wh469012917
2021 年 9 月 4 日
@zhuichen 部门领导自己没写代码,之前我有委婉提出过这个问题,领导意思就是说要改,但是他也没去推动这件事,我大概就知道他意思了
wh469012917
2021 年 9 月 4 日
@cnbattle 我理解的基础,就是要懂得怎么避免 n+1 的问题,以及在合适的场景下用 join 查询,以及 where in 查询。这里“合适的场景”的定义是:通过主键的集合查询列表,可以使用 where in 来,而不是遍历集合一条条 where id =?这样
wh469012917
2021 年 9 月 4 日
@crazycarry 如果数据量不大百万级别,并发量也不大,加 es 或者 redis 的意义在哪里?

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

https://v2ex.ih06.com/t/799533

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

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

© 2021 V2EX