应该使用 select * 吗?

2020-08-04 11:09:47 +08:00
 lux182

在使用同样索引,同样需要回表查询的情况下,应该使用

  1. select * 还是 2. select 字段,字段,...

我能想到的使用后者的优点可能就是节省那么一点点带宽,

缺点是极大的影响开发效率和维护难度,并且 mapper 文件难看,难懂

8529 次点击
所在节点    程序员
72 条回复
CrazyMoon
2020-08-04 21:57:59 +08:00
这要看相关代码的动态能力。
另外如果是列数据库,基本不能用它。
stevenkang
2020-08-04 22:08:47 +08:00
个人项目:select * —— 毕竟增减字段方便,自己的需求自己明白,只要快就行。
公司项目:select 字段 —— 毕竟产品不来需求,字段绝笔不会去改,改起来费时间慢点就慢点,只要稳就行。
tairan2006
2020-08-04 22:20:55 +08:00
单表查询一般都是 orm,join 的时候你跟我说你用 select *?

不过做动态 sql 的时候只能用*,因为连表名都是动态传进来的。
chihiro2014
2020-08-05 02:00:15 +08:00
其实可以去看看 CMU 数据库系统这块的 SQL 优化和索引部分
https://www.bilibili.com/video/av85655193
saberlong
2020-08-05 08:40:58 +08:00
代码上没碰到问题是因为用 orm 之类有映射功能的。原始的方式是和查询列顺序有关的。直接写*会导致这部分业务逻辑错误。写明列则只需修改需要增加列的地方。一个人了解所有项目是不可能的,允许随意使用*。那么发布时,可能就碰到惊喜。
hxy91819
2020-08-05 09:03:00 +08:00
在关注性能的业务场景下,任何情况都严禁使用。
lux182
2020-08-05 10:42:38 +08:00
@1069401249 上面还有一个也这样说,"把 xxx 打死",我想你是做领导做久了吧。
okjb
2020-08-05 12:00:23 +08:00
跟使用场景有关。我自己私人查数据爱用检索全部字段。业务场景就检索特定字段。又说了一堆废话
no1xsyzy
2020-08-05 12:48:55 +08:00
@tairan2006 #63 join 也可以 select a.*, b.* 来着
如果有重名不记得是报错还是自动重命名了
no1xsyzy
2020-08-05 13:12:01 +08:00
@lolizeppelin #31 你 model 不读字段名的吗?
稍微瞄了眼 SQL92 没看到哪指明 <select list> 的顺序在结果中必须被保持。
wolong
2020-08-05 23:50:27 +08:00
先 select *一把梭,后期出现性能问题了再优化成 select 字段 1, 字段 2
tairan2006
2020-08-06 09:23:11 +08:00
@no1xsyzy mysql 会报错,有歧义

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

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

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

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

© 2021 V2EX