分析Mysql索引下推是什么?是否有助优化?


mysql性能优化:什么是索引下推?

导读

索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。

在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后返回给MySQL服务器,服务器然后判断数据是否符合条件 。

在使用ICP的情况下,如果存在某些被索引的列的判断条件时,MySQL服务器将这一部分判断条件传递给存储引擎,然后由存储引擎通过判断索引是否符合MySQL服务器传递的条件,只有当索引符合条件时才会将数据检索出来返回给MySQL服务器 。

索引条件下推优化可以减少存储引擎查询基础表的次数,也可以减少MySQL服务器从存储引擎接收数据的次数。

【推荐学习:mysql视频教程】

开撸

在开始之前先先准备一张用户表(user),其中主要几个字段有:id、name、age、address。建立联合索引(name,age)。

假设有一个需求,要求匹配姓名第一个为陈的所有用户,sql语句如下:

SELECT * from user where  name like '陈%'

根据 "最佳左前缀" 的原则,这里使用了联合索引(name,age)进行了查询,性能要比全表扫描肯定要高。

问题来了,如果有其他的条件呢?假设又有一个需求,要求匹配姓名第一个字为陈,年龄为20岁的用户,此时的sql语句如下:

SELECT * from user where  name like '陈%' and age=20

这条sql语句应该如何执行呢?下面对Mysql5.6之前版本和之后版本进行分析。

Mysql5.6之前的版本

5.6之前的版本是没有索引下推这个优化的,因此执行的过程如下图:

SONIFY.io SONIFY.io

设计和开发音频优先的产品和数据驱动的解决方案

SONIFY.io 83 查看详情 SONIFY.io

bca315510b3b016d378d46cb17de39c.png

会忽略age这个字段,直接通过name进行查询,在(name,age)这课树上查找到了两个结果,id分别为2,1,然后拿着取到的id值一次次的回表查询,因此这个过程需要回表两次。

Mysql5.6及之后版本

5.6版本添加了索引下推这个优化,执行的过程如下图:

a6759f8257fd34db4b286e7249ae9e9.png

InnoDB并没有忽略age这个字段,而是在索引内部就判断了age是否等于20,对于不等于20的记录直接跳过,因此在(name,age)这棵索引树中只匹配到了一个记录,此时拿着这个id去主键索引树中回表查询全部数据,这个过程只需要回表一次。

实践

当然上述的分析只是原理上的,我们可以实战分析一下,因此陈某装了Mysql5.6版本的Mysql,解析了上述的语句,如下图:

aeceba9cdfe4c6f9da07b98b8c8eb35.png

根据explain解析结果可以看出Extra的值为Using index condition,表示已经使用了索引下推。

总结

索引下推在非主键索引上的优化,可以有效减少回表的次数,大大提升了查询的效率。

关闭索引下推可以使用如下命令,配置文件的修改不再讲述了,毕竟这么优秀的功能干嘛关闭呢:

set optimizer_switch='index_condition_pushdown=off';

以上就是分析Mysql索引下推是什么?是否有助优化?的详细内容,更多请关注其它相关文章!


# 镜像  # 如下图  # 主键  # 拿着  # 是否符合  # 如何设置  # 情况下  # 几个  # 这一  # Mysql  # 公益知识网站推广方案  # 户型优化网站推荐大全  # 风光摄影网站建设  # 场景营销小黄车怎么做推广  # 长沙整站网站推广工具  # 抖音优化seo哪家好  # 服装营销推广公司怎么做  # 忻州seo推广优化  # 湛江网站建设哪个好一点  # seo效果分析报告  # 使用了 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 如何在CSS中设置背景图像:一个全面指南  漫蛙app官方版手机正版入口-漫蛙漫画manwa在线漫画正版入口  西瓜视频怎么查看访客记录_西瓜视频访客记录查看方法  追剧达人如何发弹幕  《下一站江湖2》心法融合技巧  Win11怎么开启HDR_Windows 11显示器画质增强设置  AO3中文入口稳定分享_AO3官网HTTPS看文详解  iPhone14开启Apple TV遥控设置  Linux如何优化系统启动流程_Linux启动项优化方案  盲鳗善于分泌黏液猜猜主要用来做什么  抖音号升级企业号怎么改名字?升级企业号有哪些好处?  如何在vscode中关闭it环境  FullCalendar自定义按钮样式定制指南  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  《理想汽车》权限管理设置方法  mysql数据库索引类型有哪些_mysql索引类型解析  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  Dagster资产间数据传递与用户配置管理教程  在J*a中如何实现类的继承与方法重用_OOP继承方法重用技巧分享  《百果园》充值余额方法  《长生:天机降世》火塔小怪大全  荣耀magicv5怎么上手测评  mail.qq.com登录入口 QQ邮箱网页版直达  Composer reinstall命令重装损坏的包  《绿竹漫游》关闭消息通知方法  Go Goroutine调度与并发执行深度解析  《搜书吧》阅读书籍方法  Python模块化编程:避免循环导入与共享函数的最佳实践  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  解决CSS background 属性中 cover 关键字的常见误用  Lar*el怎么实现全文搜索_Lar*el Scout集成Algolia教程  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  QQ邮箱注册地址 免费获取QQ邮箱账号  哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南  我居然低估了 DeepSeek,这次更新它做到了这些!  WooCommerce 购物车:始终显示所有交叉销售商品  鼠标没反应了怎么办 无线/有线鼠标失灵的解决方法【详解】  ToDesk远程摄像头功能使用方法_ToDesk远程视频画面查看设置教程  J*aScript:从子元素中批量移除特定CSS类  《桃源记2》资源采集攻略  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  PHP页面重载后变量状态保持:实现用户档案连续浏览的教程  优化 WooCommerce 产品价格显示与自定义短代码集成  Golang如何初始化module项目_Golang module init使用说明  深入理解随机递归函数的确定性:内部节点、叶节点与时间复杂度分析  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  使用TinyButStrong生成HTML并结合Dompdf创建PDF教程  excel怎么计算平均值 excel平均函数*ERAGE使用教学  iPhone12是否要更新ios16  sublime如何自定义文件类型图标_AFileIcon插件的主题切换与个性化配置 

 2021-11-04

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.