5.6之后,MySQL的优化技术

在使用二级索引过滤where条件时,减少回表的次数 以及 MySQL server层和引擎层交互的次数

1.数据库如何处理where条件

index key(index first key  index last key)

确定sql查询在索引中的连续范围(起始+终止)

index filter

在起始到终止范围之内,使用索引过滤不符合条件的记录

table filter

不能使用索引处理了,回表(one by one),进行条件过滤

——————————

index first key 的提取规则

从索引(组合索引)的第一个键值开始

如果第一个键值存在,并且是=或者>=,则将该条件加入index first key,然后继续判断第二个键值,判断条件一样

如果遇到一个键值是>(范围之后全失效),则将该条件加入index first key之后,终止

如果第一个键不存在(带头大哥不能死),终止

index last key 的提取规则

与index first key 相反

index filter 的提取规则

从索引的第一个键值开始

如果索引的第一个键值为=,则跳过,判断第二个键值,判断条件一样

如果索引的第一列为> >= < <= 中的几种,则,跳过第一列,将其余where 条件中,索引想过的列全部加入index filter中

如果索引的第一列为> >= < <= 之外的条件,则,将该条件以及where条件中所有与索引相关的列全部加入index filter中

如果第一列不包含查询条件,则,将所有与索引相关的条件全部加入index filter中

table filter的提取条件

跟索引无关的列的查询条件,全部加入table filter中

2.index condition pushdown

ICP

索引条件下推

提前执行

icp的优化用于 range ref eq_ref等访问方法

innodb 和 myisam

idx_n_a(name,age)

select * from user where name < 'c' and age = 10

(1)不使用ICP

范围之后全失效,仅仅会用到索引的第一列

从索引中one by one地取出符合条件的记录,然后利用主键读取整行

对记录的完整行利用age=10这个条件进行判断

重复上述过程直至没有满足条件的行

(2)使用ICP

从索引中one by one地取出符合条件的记录,然后利用索引的其他字段的条件进行判断

如果符合索引上的全部条件,才利用主键索引读取完整行

使用了ICP之后,explain的结果extra列出现 using indexcondition

ICP的使用

(1)需要进行ICP优化的query语句,通常是where条件里面都是范围查询

(2)该查询语句必须用到二级索引

(3)如果是覆盖索引,直接index scan,就没有必要进行ICP了

(4)innodb 和 myisam都可以

(5)ICP优化策略用于range ref eq_ref

(6)5.6之后的版本

mysql 索引条件推送_MySQL 处理where条件 index condition pushdown索引条件下推相关推荐

  1. mysql pushdown_MySQL 5.6 中一个重要的优化——Index Condition Pushdown,究竟push down了什么...

    1        问题描述 一条SQL,在数据库中是如何执行的呢?相信很多人都会对这个问题比较感兴趣.当然,要完整描述一条SQL在数据库中的生命周期,这是一个非常巨大的问题,涵盖了SQL的词法解析.语 ...

  2. MySQL 索引条件下推 Index Condition Pushdown

    MySQL 索引条件下推 Index Condition Pushdown 出现在MySQL5.6及之后的版本中,能大幅提升查询效率,原因如下: 内容摘录自<深入理解MariaDB和MySQL& ...

  3. MySQL5.6之Index Condition Pushdown(ICP,索引条件下推)

    ICP(index condition pushdown)是mysql利用索引(二级索引)元组和筛字段在索引中的where条件从表中提取数据记录的一种优化操作.ICP的思想是:存储引擎在访问索引的时候 ...

  4. MySQL - 索引下推 Index Condition Pushdown 初探

    文章目录 生猛干货 Pre ICP 索引下推的含义 范围查找为啥不行? 搞定MySQL 生猛干货 带你搞定MySQL实战,轻松对应海量业务处理及高并发需求,从容应对大场面试 Pre MySQL - 索 ...

  5. MySQL索引与Index Condition Pushdown(二)

    实验 先从一个简单的实验开始直观认识ICP的作用. 安装数据库 首先需要安装一个支持ICP的MariaDB或MySQL数据库.我使用的是MariaDB 5.5.34,如果是使用MySQL则需要5.6版 ...

  6. MySQL Index Condition Pushdown

    2019独角兽企业重金招聘Python工程师标准>>> 一.Index Condition Pushdown简介 ICP(index condition pushdown)是mysq ...

  7. mysql icp(Index Condition Pushdown) using index condition

    ICP(index condition pushdown)是mysql利用索引(二级索引)元组和筛字段在索引中的where条件从表中提取数据记录的一种优化操作.ICP的思想是:存储引擎在访问索引的时候 ...

  8. MySQL Index Condition Pushdown 原理与解析

    Index Condition Pushdown(ICP)是针对mysql使用索引从表中检索行数据时的一种优化方法. 原理: 在没有ICP特性之前,存储引擎根据索引去基表查找并将数据返回给mysql ...

  9. 【MySQL】MySQL5.6新特性之Index Condition Pushdown

    一 概念介绍     Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式. a 当关闭ICP时,inde ...

最新文章

  1. jquery 临时存值
  2. 用上微软Bosque 困扰程序员30年的问题解决了
  3. SVM学习(一):SVM概念
  4. SQL Server索引进阶第十篇:索引的内部结构
  5. 详解异构计算FPGA基础知识
  6. uni app 调用网络打印机_uni-app封装一个request请求
  7. 通过binlog恢复mysql备份之前的数据
  8. cakephp 2.0 源码解读(一)
  9. java深度解析mp3文件
  10. php 使用phpize报错Cannot find config.m4. Make sure that you run ‘/usr/bin/phpize‘ in the top l
  11. php 地区表设计,php消息表设计
  12. php支付宝查询对账单下载地址,对账单下载 · 移动支付刷脸付API接口开发文档 · 看云...
  13. 全网目前最全python例子
  14. Visual Studio 2010之安装Visual Studio 2010 Service Pack 1
  15. pptpd搭建过程中 启动成功但不显示ppp0端口
  16. 编写一个USB接口程序,模拟计算机启动过程和关闭过程启动过程中要加载鼠标、键盘、麦克风等USB设备,具体要求如下: (1)定义一个接口USB,包含两个抽象方法turnOn()he turnOff(),
  17. 如何使用Axis 1.x 的WSDL2Java生成客户端
  18. 快速记忆数学知识的六个方法
  19. nginx降权+安装php
  20. KPW3 MEMORY ERROR维修直播

热门文章

  1. 第三次学JAVA再学不好就吃翔(part88)--ArrayList嵌套ArrayList
  2. 使用 ABAP 手动解析包含二进制文件的 multipart/form-data 数据时遇到的问题
  3. 解决 Angular 官网下载的 library Schematics build 出错的办法
  4. SAP UI5 初学者教程之四:XML 视图初探试读版
  5. SAP Commerce Cloud Spartacus UI 读取 Component 元数据的 Action 设计
  6. SAP Spartacus翻译 i18n - internationalization 的工作原理
  7. 微信开发系列之九 - 在微信里直接创建SAP C4C的社交媒体消息
  8. 如何提取SAP UI5应用的技术信息
  9. 仅仅有单日的确诊总人数,无法触发SAP Analytics Cloud的Smart Discovery功能
  10. 把自定义url配置到SAP Fiori Launchpad上打开