Select * 为什么效率低下

​ 无论是在平时的工作中还是面试中,都会遇到不让用Select *的情况,那么到底是什么原因导致其沦落到人人喊打的地步呢/

效率低下的原因

​ 在阿里java开发手册中关于Mysql的部分描述中提到:在表查询中一律不要使用* 作为查询的字段列表,需要用那些字段必须明确写明。原因如下:

  • 增加查询分析器解析的成本

  • 增减字符容易与resultMap配置不一致

  • 无用字段增加网络消耗,尤其是test类型的字段

    那么接下来我们就逐条深入的分析一下

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

  • 用“select * ”数据库需要解析更多的对象、字段、权限、属性等相关内容,在sql语句复杂,硬解析比较多的情况下,会对数据库造成沉重的负担
  • 增大网络开销,* 有时会误带上诸如log、IconMD5之类无用且大文本字段,数据传输size会呈现几何增长,如果DB和应用程序不在同一台机器上。这种开销会十分明显
  • 即使mysql服务器和客户端在同一机器上,使用的协议还是tcp,通信也是需要额外的时间的

对于无用的大字段,如varchar、blob、text,会增加io操作

​ 准确的来说,长度超过728字节的时候,会把超出的数据序列化到另外一个地方,因此读取这条记录会增加一次io操作。(mysql innodb)

失去mysql优化器“覆盖索引”策略优化的可能性

​ select * 杜绝了覆盖索引的可能性,而基于Mysql优化器的“覆盖索引”策略又是速度极快,效率极高、业界极为推荐的查询优化方式

联合索引

​ 联合索引(a,b,c)实际上是建立了(a)、(a,b)、(a,b,c)三个索引

联合索引的优势

  • 减少开销

    ​ 建一个联合索引,相当于建立三个索引。由于每多一个索引,都会增加写操作的开销和磁盘空间的开销。对于大量数据的表,使用联合索引会大大减少开销。

  • 覆盖索引

    MySQL 可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机 io 操作。减少 io 操作,特别是随机 io 其实是 DBA 主要的优化策略。所以,在真正的实际应用中,覆盖索引是主要的提升性能的优化手段之一。

  • 效率高

索引是建的越多越好吗

  • 数据量小的表不需要建立索引,建立会增加额外的开销
  • 不经常引用的列不需要建立索引,因为不经常使用,及时建立了索引也没多大意义
  • 经常频繁更新的列不要建立索引,因为肯定会影响插入或更新的效率
  • 数据重复且分布平均的字段,因此他建立索引就没有太大的效果(例如性别字段,只有男女,不适合建立索引)
  • 数据变更需要维护索引,意味着索引越多维护成本越高。
  • 更多的索引也需要更多的存储空间

面试官又问我Select * 为什么效率低下?相关推荐

  1. 面试官都会问的Mybatis面试题,你会这样回答吗?

    一.概述 面试,难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:"面试 ...

  2. 华为二面!!!面试官直接问我Java中到底什么是NIO?这不是直接送分题???

    华为二面!!!面试官直接问我Java中到底什么是NIO?这不是直接送分题??? 什么是NIO 缓冲区(Buffer) 缓冲区类型 获取缓冲区 核心属性 核心方法 非直接缓冲区和直接缓冲区 非直接缓冲区 ...

  3. 二面京东,面试官直接问我JVM,我心里一阵暗爽~

    二面京东,面试官直接问我JVM,我心里一阵暗爽~简直了,hhhh 明人不说暗话,直接进入主题!!! 一.什么是JVM 二.JAVA代码编译和执行过程 类加载机制 类执行机制 三.JVM内存管理和垃圾回 ...

  4. 面试官常问的 web前端 问题(二)

    面试官常问的 web前端 问题 11-20 11.什么是响应式设计? 12.为什么我们要弃用 table 标签 13.iframe 有哪些缺点 14.meta viewport 是做什么用的,怎么写? ...

  5. 【建议收藏】面试官会问的位运算奇淫技巧

    往期热门文章: 1.到底可不可以用 kill -9 关闭程序?2.IDEA 2021首个大版本发布,新增了这几个超实用功能!3.Optional 是个好东西,你真的会用么?4.Java 8 Concu ...

  6. 之前遇到一位老面试官,问我的问题真的有点东西

    这篇文章其实源于一次我的面试经历. 那次我面对是一位老面试官,真的很有东西. 那次面试我和他叨叨了两小时....我滴妈我嘴巴都干了真的. 他的提问都很有深度,可以说对我的学习之路有很大的帮助. 我记得 ...

  7. 面试官再问我如何保证 RocketMQ 不丢失消息,这回我笑了!

    0x00. 消息的发送流程 一条消息从生产到被消费,将会经历三个阶段: 生产阶段,Producer 新建消息,然后通过网络将消息投递给 MQ Broker 存储阶段,消息将会存储在 Broker 端磁 ...

  8. 99%的面试官都会问到的Java面试题

    转载自  99%的面试官都会问到的Java面试题 最近是招聘季,所谓金九银十,正是跳槽的好几节.今天,给大家整理了一些Java面试常考的经典题目,我们一道一道来分析一下. 经典面试题 1.谈谈你对 J ...

  9. 平面设计面试官常问的问题有哪些?

      平面设计面试官常问的问题有哪些?一般情况下都会有一个开篇的自我介绍,这里建议就用平常聊天说话的语气语速来介绍就可以,介绍自己扬长避短,多讲自己的前工作项目经验,在校获奖也可以讲.与工作岗位不强相关 ...

  10. 字节跳动面试官这样问消息队列:高可用、不重复消费、可靠传输、顺序消费、消息堆积,我整理了下

    写在前面 又到了年底跳槽高峰季,很多小伙伴出去面试时,不少面试官都会问到消息队列的问题,不少小伙伴回答的不是很完美,有些小伙伴是心里知道答案,嘴上却没有很好的表达出来,究其根本原因,还是对相关的知识点 ...

最新文章

  1. python 打包wheel文件,自己的SDK包
  2. 保护个人信息安全之法律思考
  3. 119. Leetcode 115. 不同的子序列 (动态规划-子序列问题)
  4. ​SpringCloud:统一异常处理
  5. Google Gson的使用方法及JSON 技术对比
  6. Spark IDEA 编程环境配置
  7. mysql linux设置密码_Linux下第一次使用MySQL数据库,设置密码
  8. 【Kafka】kafka-eagle几个指标含义
  9. java代码使用Pair元组-运行可以-编译失败
  10. Java基础 - 变量的定义和使用
  11. Grup加密(使其不能强制更改密码)
  12. java 多边形裁剪_使用 mesh 实现多边形裁剪图片!Cocos Creator!
  13. 如何让移动硬盘在Mac和Windows上通用使用
  14. ffmpeg之libx264编译安装方法及一键shell脚本
  15. 压缩文件已损坏怎么办?恢复压缩文件,解决方法看这里
  16. android手机不开机刷机,手机无法开机怎么刷机?安卓手机救砖教程
  17. linux_C_fork函数/execv/execl的使用_数据类型pid_t/getpid/sleep /warning: missing sentinel in function call
  18. MiniFilter文件系统学习
  19. 脾胃不好,有哪些在家可以做的暖胃汤方?
  20. 史上最全Python学习笔记(基于《Python学习手册(第4版)》)——Part3 语句和语法

热门文章

  1. SIM868获取LBS位置
  2. 查看linux内存和硬盘
  3. 软件测试人员每天的工作日常
  4. 嵌入式软件工程师工作经验分享
  5. IDEA中看代码时返回上一步快捷键(Mac)
  6. word怎么删除不要的页,即刻删除空白页
  7. 微信小程序实现实时音视通话-腾讯云文档dome里面的大坑
  8. Modelica学习笔记1
  9. python应该怎么样自学_Python该如何自学?
  10. Android蓝牙发送hc05,【MM32F103试用体验】+HC05蓝牙与Android手机通信