Select字段名和Select*

在实际开发过程中,有人喜欢或者习惯性地使用 select * from tablename 进行数据查询,当然使用*代替具体的字段名称还是有一些好处:

1.一定程度上减少了代码量,不需要输入具体的字段,用一个星号就可以代替所有字段;

2.无需知道表的字段名,避免输入具体字段的繁琐或输入错误;

3.当被查询的表新增字段时,无需修改select语句的代码,一定程度上提高代码复用率。

虽然Select * 带来了一些好处,但同时存在很大的问题和隐患:

1.它比只获取部分字段时更耗资源:包括IO ,内存资源 CPU资源等数据库资源和网络资源。就像平时从水井里面打水一样,一次性取半个水桶和取满水桶消耗的体力是完全不同的,select * 就相当于取满水桶,消耗的资源相对也比较多;

2 .容易导致索引失效,效率低 ,特别是覆盖索引无法被充分使用。

覆盖索引是筛选条件(如where 子句、group by 子句和 order by子句等)涉及的字段以及select后面字段组成的索引。如果使用了select *,不可能给表创建一个覆盖所有字段的索引,即使使用到已有的覆盖索引,也需要进行回表查找;

3 .优化起来比较困难,特别是无法添加覆盖索引。

在慢查询语句排查中如果发现 select a,b,c from tablename where e =2 效率比较低,在分析执行计划后,如果发现该sql没有使用到索引,而是走了全表扫描,这时候我们就可以针对字段e,a,b,c创建覆盖索引。而如果采用的是select * from tablename where e =2 的查询方式,就无法创建覆盖索引。

综合以上情况,在日常的开发中,除一些特殊场景外,建议尽量不使用select * from 的形式进行数据的查询,而使用具体的字段名代替*,为后续性能优化提供便利。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据超库

多谢您的鼓励,我会更加努力创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值