题解 | 检索所有列 select * 和 select 具体列名

检索所有列

https://www.nowcoder.com/practice/cf0e3919ba8e4fa2ba19ea09df7fb756

select cust_id,cust_name 
from Customers;

实际生产开发面试中,更推荐写第二种:虽然在这道题里两种写法结果一样,但在工程实践中,SELECT * 通常被视为坏习惯

🚀 为什么推荐明确列出列名?

1. 性能优化(最重要)

  • SELECT *:数据库需要解析元数据,找出所有列,然后读取所有字段的数据(包括你可能不需要的超大文本字段、BLOB 等)。这会增加 I/O 开销和网络传输量。
  • SELECT col1, col2:只读取需要的列。如果这些列上有覆盖索引(Covering Index),数据库甚至不需要回表查数据,直接从索引树就能拿到结果,速度极快。

2. 代码健壮性与可维护性

  • 场景:假设明天有人在 Customers 表里加了一个敏感字段 password 或者一个巨大的字段 user_bio。如果是 SELECT *:你的代码会自动把密码或大文本查出来,可能导致内存溢出或敏感信息泄露,而且前端接口可能因为字段变多而报错。如果是 SELECT cust_id, cust_name:你的代码完全不受影响,依然只查这两列,安全稳定。

3. 语义清晰

  • 看到 SELECT cust_id, cust_name,阅读代码的人一眼就知道:“哦,这个功能只需要用户 ID 和姓名”。
  • 看到 SELECT *,读者会疑惑:“作者到底需要哪些列?是不是漏了过滤条件?”

总结

  • 做题:如果题目没明确说“只查这两列”,写 SELECT * 通常也能过(因为判题系统只看结果集是否匹配)。
  • 工作/面试永远优先写具体列名。这是区分“新手”和“专业工程师”的一个细节。
牛客网题目 文章被收录于专栏

做题心得,记录下来,供自己学习

全部评论

相关推荐

03-31 00:39
门头沟学院 C++
南岗痞子:不还有俩没结束吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务