MYSQL-谨慎使用 select * ?

MYSQL-谨慎使用 select * ?

      

       每次在写SELECT查询语句的时候,都需要用怀疑的眼光审视,是不是真的需要返回全部的列,确定要使用SELECT * FROM?是否确实需要返回全部结果集,确定不加LIMIT限制?

      下面对这些情况加以解析和说明,仅供参考。

 

错误方式:

     select * from TblA;

     这将取出表的全部列,会让MYSQL优化器无法完成索引覆盖扫描这类优化,还会为服务器带来额外的I/O,内存和CPU的消耗。造成系统的延迟的重头戏是网络开销,网络开销可能带来秒级的延迟,select * 会查询出不需要的、额外的数据,那么这些额外的数据在网络上进行传输,必定会造成性能延迟。假设你的table中,有一些列的类型为BLOB,TEXT等,此时,你的select *操作,就会更加缓慢,并且会造成额外的网络开销。

正确方式:

    select col1 from TblA LIMIT 10;

    在col1字段有索引的情况下,mysql是可以不用读data,直接使用index里面的值就返回结果的。但是一旦用了select *,就会有其他列需要读取,这时在读完index以后还需要去读data才会返回结果。这样就造成了额外的性能开销。如果不需要全部结果集显示,最好根据实际情况在查询后面加上LIMIT,这样MYSQL就不会查询出全部的结果集了。

 

 

错误方式二:

select * from TblA

inner join TblB USING(A_ID)

inner join TblC USING(B_ID)

WHERE TblA.id = ?;

 

这种方式将返回三个表的全部数据列,正确的方法是应该指定只取需要的某些列名称,如:

select TblA .col1,TbleB.col2  from TblA

inner join TblB USING(A_ID)

inner join TblC USING(B_ID)

WHERE TblA.ID = ?;

 

总之,查询超过实际需要的数据,然后这些多余的数据会被应用程序抛弃,这会给MYSQL服务器带来额外的福大,并增加网络开销,同时也会消耗应用服务器的CPU和内存资源。

 

当然有的人会觉得使用select * ,这样在增加列的时候,不用改sql语句,可以简化开发,可提高相同代码片段的复用性。但是如果你select 指定列,只获取自己需要的几列,表结构的修改,对你代码的影响就会小很多,另外对于其他接手你项目的人来说,看到select 指定列的方式,可读性更强,对于他们来说更好理解!所以,谨慎使用select * from!


备注:实战示例,解疑答惑。

           --不间端地思考,实时地批判你的工作!

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值