广告
返回顶部
首页 > 资讯 > 数据库 >Mysql性能优化:什么是索引下推?
  • 446
分享到

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

Mysql性能优化:什么是索引下推? 2018-12-31 13:12:29 446人浏览 才女
摘要

导读 本文章始发于本人公众号:码猿技术专栏,原创不易,谢谢关注推荐。 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用

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

导读

  • 本文章始发于本人公众号:码猿技术专栏,原创不易,谢谢关注推荐。
  • 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。

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

  • 在使用ICP的情况下,如果存在某些被索引的列的判断条件时,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之前的版本是没有索引下推这个优化的,因此执行的过程如下图:

 

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

 

Mysql5.6及之后版本

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

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

 

实践

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

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

 

总结

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

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

  set optimizer_switch="index_condition_pushdown=off";

 

您可能感兴趣的文档:

--结束END--

本文标题: Mysql性能优化:什么是索引下推?

本文链接: https://www.lsjlt.com/news/5239.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql性能优化:什么是索引下推?
    导读 本文章始发于本人公众号:码猿技术专栏,原创不易,谢谢关注推荐。 索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用...
    99+
    2018-12-31
    Mysql性能优化:什么是索引下推?
  • Mysql性能优化之索引下推
    索引下推(index condition pushdown )简称ICP,在Mysql5.6的版本上推出,用于优化查询。 在不使用ICP的情况下,在使用非主键索引(又叫普通索引或者二级索引)进行查询时,存储引擎通过索...
    99+
    2022-05-19
    Mysql 索引下推
  • MySQL查询性能优化索引下推
    目录前言1. 索引下推的作用2. 案例实践3. 索引下推配置4. 索引下推原理剖析5. 索引下推应用范围前言 前面已经讲了mysql的其他查询性能优化方式,没看过可以去了解一下: MySQL查询性能优化七种方式索引潜水 ...
    99+
    2022-08-16
    MySQL查询性能优化 MySQL索引下推
  • MySQL索引下推是什么
    本文小编为大家详细介绍“MySQL索引下推是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL索引下推是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。SELEC&...
    99+
    2022-10-19
  • MySQL使用索引优化性能
    目录1.索引问题2.索引的存储分类3.如何使用索引3.1使用索引3.2存在索引但不使用索引4.查看索引使用情况5.两个简单实用的优化方法5.1定期分析表和检查表5.2定期优化表1.索...
    99+
    2022-11-13
  • Mysql索引下推有什么作用
    这篇文章主要讲解了“Mysql索引下推有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mysql索引下推有什么作用”吧!导读索引下推(index c...
    99+
    2022-10-18
  • Mysql性能优化:为什么要用覆盖索引?
    导读   相信读者看过很多MYSQL索引优化的文章,其中有很多优化的方法,比如最佳左前缀,覆盖索引等方法,但是你真正理解为什么要使用最佳左前缀,为什么使用覆盖索引会提升查询的效率吗? 本篇文章将从MYSQL内部结构上讲一下...
    99+
    2018-09-16
    Mysql性能优化:为什么要用覆盖索引?
  • MySQL索引优化规则是什么
    这篇文章将为大家详细讲解有关MySQL索引优化规则是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。今天mysql教程栏目为大家介绍MySQL的索引优化规则。前言索引的...
    99+
    2022-10-18
  • 怎么进行MySQL性能优化中的索引优化
    本篇文章为大家展示了怎么进行MySQL性能优化中的索引优化,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引...
    99+
    2022-10-19
  • MYSQL性能故障优化利器之索引优化
                     &...
    99+
    2022-10-18
  • mysql索引优化的原则是什么
    MySQL索引优化的原则包括以下几点: 选择合适的索引类型:MySQL支持多种索引类型,包括B-Tree索引、哈希索引和全文索引...
    99+
    2023-10-28
    mysql
  • MySQL性能优化1-MySQL底层索引结构
    ❤️ 个人主页:程序员句号 🚀 支持水滴:点赞👍 + 收藏⭐ + 留言💬+关注 🌸 订阅专栏:MySQL性能调优 MySQL性能优化专栏 1.MySQL性能优化1-MyS...
    99+
    2023-08-23
    mysql 性能优化 数据库
  • 一篇文章读懂什么是MySQL索引下推(ICP)
    目录一、简介 二、原理 三、实践 3.1 不使用索引下推 3.2 使用索引下推 四、使用条件 五、相关系统参数 总结一、简介 ICP(Index Condition Pushdow...
    99+
    2022-11-12
  • MySQL高性能索引策略和查询性能优化
    前缀索引和索引选择性 有时候需要索引很长的字符,这会让索引变得大且慢。一个策略是模拟哈希索引。 通常可以索引开始的部分字符,这样可以大大解约索引空间,提高索引效率。但这样会降低索引的选择性。 索引的选择性:不重复的索引值(也成为基数)和...
    99+
    2017-05-17
    MySQL高性能索引策略和查询性能优化
  • Mysql索引性能优化问题解决方案
    mysql 创建的优化就是加索引,可是有时候会遇到加索引都没法达到想要的效果的情况, 加上了所以,却还是搜索的全数据,原因是sql EXPLAIN SELECT cs.sid, ...
    99+
    2022-05-11
    Mysql 索引 性能优化
  • MySQL索引优化的性能分析和总结
    本篇内容主要讲解“MySQL索引优化的性能分析和总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL索引优化的性能分析和总结”吧!案例分析我们先简单了解...
    99+
    2022-10-18
  • Mysql索引底层及优化方法是什么
    今天小编给大家分享一下Mysql索引底层及优化方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2022-10-19
  • MySQL索引优化器工作原理是什么
    这篇“MySQL索引优化器工作原理是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“My...
    99+
    2022-11-30
    mysql
  • MySQL:性能优化-索引、语句、配置(基于5.7)
       小生博客:http://xsboke.blog.51cto.com             ...
    99+
    2022-10-18
  • Mysql性能优化:如何给字符串加索引?
    导读 现代大部分的登录系统都支持邮箱、手机号码登录两种方式,那么如何在邮箱或者手机号码这个字符串上建立索引才能保证性能最佳呢? 今天这篇文章就来探讨一下在Mysql中如何给一个字符串加索引才能达到性能最佳。 本文首发于作...
    99+
    2018-08-13
    Mysql性能优化:如何给字符串加索引?
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作