《MySQL》第十三篇 SELECT * 和 SELECT 字段名的区别

在实际开发中,进行数据查询的SQL无非有两种写法,使用SELECT * from tableName或者SELECT 字段名(多个) from tableName,二者各有利弊

SELECT * 写法

优点:

  1. 写法简单,不需要手动输入具体的字段,一定程度上减少代码量,需要查询的字段用一个*号就能替代
  2. 不需要关注表的字段名称,一定程度上避免繁琐的字段名输入和错误输入的情况发生
  3. 在不考虑查询条件的影响下,无需考虑表结构字段的增减;无需对SQL语句进行修改,一定程度上可以提高代码的复用率

缺点:

  1. SELECT * 表示查询表中所有字段,在执行SQL时,MySQL的词法分析器会通过Bison将 * 号解析为数据库表的全部字段,相比select 字段来说,多一步解析操作,效率上比select 字段 要低一些
  2. 由于查询了表所有字段,MySQL会全表扫描,查询的结果中会存在大量不需要的字段信息,增加网络传输的开销,降低查询的效率
  3. 会导致覆盖索引失效,使用select * ,不可能给所有字段创建一个覆盖索引,即使使用到已有的覆盖索引,也需要进行回表查找;

SELECT 字段

优点:

  1. 可以根据需要,有目的性的选择查询字段,可避免冗余字段的产生,提高查询效率,降低网络传输的开销
  2. 能更好的进行SQL优化;当执行select 字段 语句时,由于数据库数据较多,查询效率低,可能根据查询的字段,建立联合索引,提升查询效率;而select * 不好创建联合索引

缺点:

  1. 受到表结构变化带来的影响;在增删表字段时,SQL可能也需要同步修改;否则新增的字段查询不出,删除的字段,执行SQL会报错
  2. 需要手动的将表字段全部罗列处理,如果表字段很多时,耗费时间

不同的写法,可以满足不同的场景。在实际应用中,需要根据具体情况选择合适的写法。如果需要查询所有字段,可以使用 SELECT *。如果需要精确控制查询的字段,可以使用 SELECT 字段。

相关推荐
勿忘,瞬间23 分钟前
Mybatis高阶
java·数据库·mybatis
运维行者_1 小时前
ISP 企业级带宽计费怎么做?网络流量计费的 6 大核心能力
运维·服务器·网络·数据库·支持向量机·接口隔离原则
奇树谦1 小时前
PCB生产制造全流程详解:从开料、钻孔、沉铜到检测、包装
网络·数据库·制造
驾驭人生1 小时前
Hangfire.Redis.StackExchange 已归档停更!生产任务卡死、重复执行、网络抖动问题解决方案
数据库·redis·缓存
xierui1231231 小时前
Agent记忆不是聊天记录:用三层存储构建可追溯的 AI 工作流
数据库·人工智能·aigc·软件工程
2301_800074212 小时前
mysql DQL
数据库·sql·mysql
西风未眠2 小时前
ClickHouse数据库引擎引起的数据丢失
数据库·clickhouse·故障
海浪仙人掌2 小时前
应收账款分析如何操作?应收账款分析有哪些注意事项?
数据库·人工智能
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中回填时间序列数据:通过批量 API 加载数月的历史指标数据
大数据·运维·数据库·人工智能·elasticsearch·搜索引擎·全文检索
Horn Still Sounds2 小时前
Linux网络并发服务器模型与SQLite数据库学习笔记
linux·服务器·数据库