《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 字段。

相关推荐
晚霞的不甘7 分钟前
揭秘 CANN 内存管理:如何让大模型在小设备上“轻装上阵”?
前端·数据库·经验分享·flutter·3d
市场部需要一个软件开发岗位27 分钟前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
海奥华230 分钟前
mysql索引
数据库·mysql
2601_949593651 小时前
深入解析CANN-acl应用层接口:构建高效的AI应用开发框架
数据库·人工智能
javachen__1 小时前
mysql新老项目版本选择
数据库·mysql
Dxy12393102162 小时前
MySQL如何高效查询表数据量:从基础到进阶的优化指南
数据库·mysql
Dying.Light2 小时前
MySQL相关问题
数据库·mysql
蜡笔小炘2 小时前
LVS -- 利用防火墙标签(FireWall Mark)解决轮询错误
服务器·数据库·lvs
韩立学长2 小时前
基于Springboot泉州旅游攻略平台d5h5zz02(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·旅游
Re.不晚3 小时前
MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
数据库·mysql·架构