为什么大家都说 SELECT * 效率低
码农突围
共 3584字,需浏览 8分钟
· 2020-08-12
一、效率低的原因 1. 不需要的列会增加数据传输时间和网络开销 2. 对于无用的大字段,如 varchar、blob、text,会增加 io 操作 3. 失去MySQL优化器“覆盖索引”策略优化的可能性 二、索引知识延申 联合索引 (a,b,c) 联合索引的优势 索引是建的越多越好吗 三、心得体会
一、效率低的原因
增加查询分析器解析成本。 增减字段容易与 resultMap 配置不一致。 无用字段增加网络 消耗,尤其是 text 类型的字段。
1. 不需要的列会增加数据传输时间和网络开销
用“SELECT * ”数据库需要解析更多的对象、字段、权限、属性等相关内容,在 SQL 语句复杂,硬解析较多的情况下,会对数据库造成沉重的负担。 增大网络开销;* 有时会误带上如log、IconMD5之类的无用且大文本字段,数据传输size会几何增涨。如果DB和应用程序不在同一台机器,这种开销非常明显 即使 mysql 服务器和客户端是在同一台机器上,使用的协议还是 tcp,通信也是需要额外的时间。
2. 对于无用的大字段,如 varchar、blob、text,会增加 io 操作
3. 失去MySQL优化器“覆盖索引”策略优化的可能性
二、索引知识延申
联合索引 (a,b,c)
联合索引的优势
1) 减少开销
2)覆盖索引
SELECT a,b,c from table where a='xx' and b = 'xx';
3)效率高
select col1,col2,col3 from table where col1=1 and col2=2 and col3=3;
A. 如果只有单列索引,那么通过该索引能筛选出 1000W10%=100w 条数据,然后再回表从 100w 条数据中找到符合 col2=2 and col3= 3 的数据,然后再排序,再分页,以此类推(递归); B. 如果是(col1,col2,col3)联合索引,通过三列索引筛选出 1000w10% 10% *10%=1w,效率提升可想而知!
索引是建的越多越好吗
数据量小的表不需要建立索引,建立会增加额外的索引开销 不经常引用的列不要建立索引,因为不常用,即使建立了索引也没有多大意义 经常频繁更新的列不要建立索引,因为肯定会影响插入或更新的效率 数据重复且分布平均的字段,因此他建立索引就没有太大的效果(例如性别字段,只有男女,不适合建立索引) 数据变更需要维护索引,意味着索引越多维护成本越高。 更多的索引也需要更多的存储空间
三、心得体会
---END--- 重磅!码农突围-技术交流群已成立 扫码可添加码农突围助手,可申请加入码农突围大群和细分方向群,细分方向已涵盖:Java、Python、机器学习、大数据、人工智能等群。 一定要备注:开发方向+地点+学校/公司+昵称(如Java开发+上海+拼夕夕+猴子),根据格式备注,可更快被通过且邀请进群 ▲长按加群 推荐阅读
• 天天在用 Stream,那你知道如此强大的 Stream 的实现原理吗? • 项目是如何死掉的?太过真实! • 太牛了!高考失利只能进清华,35岁成阿里最年轻技术副总裁,他来自另一个平行世界! • 数据库链接池终于搞对了,这次直接从100ms优化到3ms! • Google 再见 Java • 面试官:我把数据库部署在Docker容器内,你觉得如何? 最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。 获取方式:点“在看”,关注公众号并回复 BAT 领取,更多内容陆续奉上。 如有收获,点个在看,诚挚感谢明天见(。・ω・。)ノ♡
评论
真心建议大家搞个香港身份,再不冲就晚了
香港一直有“互联网荒漠”之称,疫情这三年,香港开始大力扶持互联网 科技工程 /IT产业,公布了《香港智慧城市蓝图》。目前规划已经覆盖到交通、医疗、经济、教育、环境等多个方面。目前在智能制造,5G网络、智慧城市等领域人才,通过香港优才计划入境都极具优势。什么是香港优才计划优才计划,全称优秀人才入境计划
公子龙
0
BigDecimal 为什么可以保证精度不丢失?
来源:juejin.cn/post/7348709938023940136👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接
小哈学Java
0
让扩散模型听话的小秘籍?CAN:通过操控权重来控制条件生成模型,图像生成效率大升级!
↑ 点击蓝字 关注极市平台作者丨科技猛兽编辑丨极市平台极市导读 本文提出的 CAN 模型 (Condition-Aware Neural Network) 是一种对图像生成模型添加控制的方法。CAN 可以通过动态操纵神经网络的权重来控制图像生成过程。作者在 ImageNet 图像
极市平台
0
我想写几个专栏,欢迎大家投票
大家好,我是章北海前段时间更新了一个专栏,阅读和订阅都极不理想,看起来是没有做好调研啊。准备启动新的专栏更新计划了,我有几个选题,看大家更喜欢哪一个呢?欢迎投票,拜谢!
机器学习算法与Python实战
0
为什么我们公司还在用 Python 开发项目?
作者:哇哒嘻哇https://www.zhihu.com/question/278798145/answer/3416549119最近几年里,经常看到某些曾重度使用 Python 的大公司迁移成其它语言技术栈,但是,那些小公司/小团队的情况如何呢?一直很想了解那些仍在坚持使用 Python,且支撑业
机器学习算法与Python实战
0
【第128期】提升编程效率VSCode变量命名插件推荐
概述 在编程的世界里,一个好的变量名不仅能够提升代码的可读性,还能反映出程序员的专业水平。Visual Studio Code(VSCode)作为一个广受欢迎的代码编辑器,拥有丰富的插件生态系统,其中不乏能够帮助我们高效命名变量的工具。今天,我们就来介绍几款VSCode上能够提升变量命名效率的插件
前端微服务
0
知乎高问:程序员有必要知道为什么做某个功能吗?
将Python客栈设为“星标⭐”第一时间收到最新资讯前言知乎上有一个提问:程序员有必要知道为什么做某个功能吗?↓↓↓今天,我们就这个话题一起来做个讨论。不知道程序员的你,在接到产品经理提的一个需求后,是习惯马上动手开始撸代码呢?还是会先暂停一下,认真思考一会如下一些问题,比如这个需求产生的背景是什么
Python客栈
0