你们对禁止使用 SELECT *有什么看法?我被恶心到了...

2021-12-28 17:49:46 +08:00
 retrocode

七八年的老项目,一个表几十个字段,随便一条 SQL 又臭又长,二十几行的 SQL 有十行都是各种字段,然后各种嵌套看的我眼睛都快瞎了

关键还是在 JAVA 中用字符串拼接然后到处复制粘贴,这改一个字段那改一个字段这种,真正贯彻了没有一个多余字段这种概念.

用*换取来的那点性能真的值得做到这种地步吗....

5234 次点击
所在节点    问与答
33 条回复
chanchan
2021-12-29 09:51:28 +08:00
@lululau 确实,太原始了,虽然刚入行写了一段时间,个人还是更喜欢 JPA hibernate
moyi97
2021-12-29 10:25:20 +08:00
对于现在的数据仓库来说,很多数据开发(大部分用 sql) 中的规范中,是坚决禁止 select * 的.但是对于代码中拼 sql 这种行为我觉得很难看(虽然说我也干过.)
arthas2234
2021-12-29 10:55:45 +08:00
最讨厌的就是在代码里面写 sql ,贼难维护
bing1178
2021-12-29 11:05:59 +08:00
那 select * 有啥问题吗?
bing1178
2021-12-29 11:07:45 +08:00
那 select * 有啥问题吗?
如果 70%字段我都需要 就是 *
如果 只有 10%字段需要 再上量大 我会 写上字段

这样没啥问题吧?
clf
2021-12-29 12:02:54 +08:00
@zzzain46 #11 navicat 创建一个查询后有可视化的 SQL 编辑器,直接选择你要的数据表和勾选要的字段就行。会自动帮你写好 join 等 SQL 语法。
ppphp
2021-12-29 12:40:25 +08:00
select *和 anyscript 一样,属于语言方便给程序员写脚本而不是生产环境实际跑起来的代码
FrankAdler
2021-12-29 13:07:40 +08:00
一个表,到处都在使用,分散在项目的各个地方,这是代码分层的问题,不然就算不使用 select * 就算单表字段很多,也不应该这么改死人
atpking
2021-12-29 14:34:08 +08:00
写多年的 rails 已经习惯 active_record 解决战斗了, 都要退化到只会 join 了
Citrus
2021-12-29 14:42:18 +08:00
@bing1178

跟字段数量什么的都无关。
SELECT * 最主要的问题是会引入非预期的字段。最典型的是,你的 Java 程序使用 MyBatis 或者直接 JDBC 调用,然后我在数据库里新增了一个字段。于是你在解析 SELETE * 的结果时候,由于返回参数数量不匹配,直接失败。

当然,并不是所有写法都会有这个问题,但是大多数常用的方式都存在这个隐患,所以阿里才会把不要用 SELETE * 写入代码规范。

[强制] 在表查询中,一律不要使用 * 作为查询的字段列表,需要哪些字段必须明确写明。
说明:1 )增加查询分析器解析成本。2 )增减字段容易与 resultMap 配置不一致。3 )无用字段增加网络
消耗,尤其是 text 类型的字段。
retrocode
2021-12-29 15:16:05 +08:00
@lululau 设计和业务问题,国内传统企业都是跟业务走,这种公司里程序员甚至架构师产品经理的地位都不高,今天改个需求明天废弃字段还催工期,然后对代码质量要求不高功能实现就 ok ,日积月累初始架构设计的再好也迟早得崩要么毁灭要么变屎山。

比如新需求 username 字段废弃,原有系统中的 username 改为 xxx 表中的 new_username 字段,而且早上提需求,中午问进度,第二天早上要上线。

现在改前后端根本来不及,还会有浏览器缓存,cdn 等问题,这种狂野的需求,最简单的方法是修改 sql 字段 new_username AS username 。

都是泪啊😵
shyangs
2021-12-29 15:55:50 +08:00
直接上 ORM 框架. 例如 Hibernate.


MyBatis 這種半吊子的,只能算 SQL 模板引擎.

XML 沒有 Java 語法級別的提示和靜態語言重構輔助.
新增字段? 就搜一下關鍵字然後一行一行改 XML 吧,一不小心就改錯了或者漏了(我相信任何用過 MyBatis 的人都遇到過這個問題)
qfdk
2021-12-29 20:23:40 +08:00
那天用了* 被老大说了….. 因为这样会导致有过多的信息查询出来 导致 数据臃肿. 简单来说就是用什么拿什么

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

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

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

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

© 2021 V2EX