select * 的使用说明
一、 SELECT * 的含义
select * 语句是从指定的表中按照顺序返回所有列。
二、 SELECT * 的优缺点
1 优点
在实际开发过程中,大家习惯性地使用select * from table_name进行数据查询,当然使用*代替具体的字段名称有一些优点。
主要优点有如下几个方面:
1.1 减少代码量
一定程度上减少了代码量,不需要输入具体的字段,用一个星号就可以代替所有字段。
1.2 避免输入错误
无需知道字段名,避免输入具体字段的繁琐或输入错误。
1.3 提高代码复用率
当被查询的表新增字段时,无需修改select语句的代码,一定程度上提高代码复用率。
2 缺点
在实际开发过程中,尽管使用select * 具有一定的优点,但同时存在很大的问题和隐患:
2.1 增加网络开销和传输时间
用select * 时查询分析器需要解析更多的对象、字段、权限、属性等相关内容,在 SQL 语句复杂,硬解析较多的情况下,会对数据库造成沉重的负担。
另外使用select * 有时会误带上无需使用的字段或者一些大文本字段,数据传输size会几何增涨,增大网络开销。
2.2 无法使用覆盖索引,增加查询成本
select * 杜绝了覆盖索引的可能性,而基于MySQL优化器的“覆盖索引”策略又是速度极快,效率极高,业界极为推荐的查询优化方式。
比如对于下面的两句sql:
select col1 from table;
select * from table;
如果col1字段包含索引信息,那么此时,这两句的sql执行时间可能会有几十上百倍的差异。
在col1字段有索引的情况下,MySQL是可以不用读data,直接使用index里面的值就返回结果的。但是一旦用了select *,就会有其他列需要读取,这时在读完index以后还需要去读data才会返回结果。这样就造成了额外的性能开销。
2.3 可读性和扩展性差
使用*代替了表中所有的字段名,但是对于不熟悉代码库的人,将不得不查看文档或者表结构以了解更改之前返回的列。从长远来看,如果表结构变更需要修改代码,可能耗费开发人员更多的时间和精力。
采用 select * 进行查找时,查询到的列是按照它们在表的原始位置展示的,如果更改表结构,会导致难以察觉的错误。比如:在做数据同步时,字段顺序发生了变化,会导致表中的数据错乱。对于引用该表的视图,如果增加了字段,会导致查询视图时返回无用的数据,查询性能变差。
三、 SELECT * 的使用场景
1 临时查询的场景
当调试SQL特别是某一表自己不熟悉的时,select *就显得很友好了。这样表的列名越长、表中的字段个数越多,使用select *时就非常实用和方便。
2 查询大量字段或者所有字段的场景
对于一些特殊的场景,比如做数据备份和数据同步,往往需要查询表中所有的字段,此时使用select * 一方面可以减少代码量,非常明确地知道是备份表中所有的字段;另一方面避免输入具体字段的繁琐或输入错误。
比如下面的两个sql:
create table abc_backup as select * from abc ;
insert into abc_new select * from abc ;
如果只需要查询该表中的少量字段,或者表中有些字段数据很大,查询时又不需要,没必要使用select *。
3 * 表示一行数据的场景
(1)比如以下统计表中行数的sql:
select count(*) from table;
在此用例中“*”表示“数一下行数”,如果用列名替代这表示要数一下列对应值不为NULL的行数,COUNT(*)才是本质意义的行数。
(2)以下类型的Query也是一样的:
SELECT a.ID FROM TableA a
WHERE EXISTS (
SELECT *
FROM TableB b
WHERE b.ID = a.B_ID);
在这个语句中,“*”就是表示“一行”。
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/16523568.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器