2020-08-17

why  not  select * ?

1.大家都知道应尽量避免使用select *  ,这也是在程序员面试中关于sql 优化老生常谈的话题。

    面试官:说一下你常用的sql优化方式吧

    小马:比如不要用select * ,。。。。。等等,各种面试宝典的神操作

    面试官:那你说下select * 为什么查询效率低呢?

    小马: 好像是因为他多查了一些无用字段吧

     面试官:还有吗?

    小马: 呃... 嗯..  没了

 如果这样回答,那基本就GG 了 ,面试官估计接下来只能说:  你还有什么要问我的嘛?(手动狗头)

so why  not  select  * ?

总结下来,大概是以下几点,欢迎补充(手动欢迎)

1.不需要的列会增加数据传输时间和网络开销

    多余的列会增加数据库的解析负担,增大网络开销,因为需要解析更多的字段、对象、权限、属性等相关内容,如果运气不好,带上了如log、iconmd5等大文本字段时更惨,如果数据库的服务器和客户端还不在一个机器上的时候,更是雪上加霜,还有额外的通信时间。

2.对于额外的大字段如blob .text 会增加io操作

    长度超过728字节的时候,数据库先把超出的数据序列化到另一个地方,因此读取的时候会增加一次io操作

3.杜绝了基于mysql优化器的覆盖索引的可能性 

    当辅助索引和聚集索引都存在的情况下,通过辅助索引覆盖索引,通过辅助索引就能获取用户的所需列,直接从内存取,都不需要走磁盘,而聚集索引比辅助索引多很多,很可能数据在磁盘中(取决于buffer poll的相关设置),速度会差很多。

记录到此,拜拜!(其实,其实在底层在细节还是有很多知识的,先搞点皮毛,哈哈哈哈哈   )

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值