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的相关设置),速度会差很多。
记录到此,拜拜!(其实,其实在底层在细节还是有很多知识的,先搞点皮毛,哈哈哈哈哈 )