应该使用 select * 吗?

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

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

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

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

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

8475 次点击
所在节点    程序员
72 条回复
chenset
2020-08-04 11:14:38 +08:00
1.特别需要注意性能与并发或者大 text 字段的时候就列出字段

2.其他情况直接*

两者不误
clf
2020-08-04 11:18:42 +08:00
现在大部分 select 操作应该都是 orm 框架帮我们处理了?

对于少数的自己写的查询,我一般都是 select 字段,字段,字段 这样对应自己定义的对象来处理。(反正都是用 navicat 的查询构造器来写的,勾选一下参数的事情,不需要特别麻烦。
lux182
2020-08-04 11:19:01 +08:00
@chenset 同意,现在市面上好多不分青红皂白都建议列举所有字段
lux182
2020-08-04 11:22:33 +08:00
@lychs1998 我感觉最近几年项目用 orm 反而少了。用工具构造查询是挺方便,缺点就是每次修改数据库就要在代码里 review 一遍。而且字段列举很多让人看的不舒服
piecehealth
2020-08-04 11:23:06 +08:00
遇到过一次玄幻的事,用的 PostgreSQL 9+,select 字段...(字段不全是索引列) 跟 select * 用的索引不一样( pg 没法指定索引),select * 用的是效率高的索引。
cruii
2020-08-04 11:24:27 +08:00
我觉得把字段写清楚更好看,能让别人清楚的知道,你想拿哪些数据。
CrazyEight
2020-08-04 11:24:53 +08:00
select *用不到索引覆盖,而且字段过多会占用更多的 joinBuffer 会导致表连接变慢
lux182
2020-08-04 11:29:26 +08:00
@piecehealth select * 会有索引优化器选择合适的索引吧?
lux182
2020-08-04 11:33:39 +08:00
@cruii 当字段只有 3 、5 个时候比较清楚,当字段 10 多个以上时候,我觉得不如我直接看 model,还有注释呢
lux182
2020-08-04 11:35:34 +08:00
@CrazyEight 已经说明了不考虑覆盖索引,实际情况覆盖索引使用的字段也很少,基本不超过 3 个。joinBuffer 这个触及知识盲点
Vegetable
2020-08-04 11:36:14 +08:00
不推荐 select * ,不是因为性能问题,而是你没法控制 * 代表了什么,你的代码有可能会依赖数据库结构而不自知。
lux182
2020-08-04 11:40:06 +08:00
@Vegetable 可以举个例子吗?
xuanbg
2020-08-04 11:41:12 +08:00
一般都是*,特殊情况列出字段
InkAndBanner
2020-08-04 11:43:31 +08:00
还是写清楚更好 用啥拿啥
lux182
2020-08-04 11:44:27 +08:00
@xuanbg 我也是这样用的。接触的传统型公司反而是列出字段的居多,比如恒生,他们会用工具生成一系列 mapper,service,里面各种条件表达式。说实话还不如自己写
stabc
2020-08-04 11:48:03 +08:00
我一般是排除比较大的字段,但是 SQL 语句目前没法简单的排除字段
ragnaroks
2020-08-04 11:48:48 +08:00
手动查询用"*",代码里面指定字段,因为有自动步枪
yuanbo6
2020-08-04 11:49:34 +08:00
前一阵看了一个文章说还是推荐带字段,原因太长我给忘了……
yc8332
2020-08-04 11:49:47 +08:00
这个要看吧。。如果没差几个字段,又不是大字段。。无所谓
superrichman
2020-08-04 11:50:05 +08:00
在我这里你敢用 select *会被打死的 /doge

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

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

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

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

© 2021 V2EX