题解 | 检索所有列 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 *通常也能过(因为判题系统只看结果集是否匹配)。 - 工作/面试:永远优先写具体列名。这是区分“新手”和“专业工程师”的一个细节。
牛客网题目 文章被收录于专栏
做题心得,记录下来,供自己学习