MySQL5.6新特性Index conditontion pushdow
index condition pushdown是MySQL5.6的新特性,主要是对MySQL索引使用的优化。
Index condition push简称ICP,索引条件下推,将索引条件从server层下推到storage engine层。
此时出现ICP现象,但ICP到底是个什么现象呢。
1、ICP的开启和关闭方法:
set optimizer_switch=’index_condition_pushdown=on|off’
2、ICP使用限制:
ICP适用于MyISAM和InnoDB表,对于InnoDB表只能用于二级索引。
MySQL5.6版本的分区表还没有ICP功能,官网文档介绍将于5.7版本中解决。
3、ICP的目的在于减少完整读取一条记录的次数,从而减少IO的操作。
4、
当优化器没有使用ICP的时候,数据的访问和提取:
当storage engine层读取记录的时候,首先使用索引定位并读取整条记录,server层再根据where条件决定该条记录是否使用。
当优化器使用ICP的时候,数据的访问和提取:
当storage engine层读取记录的时候,首先测试where条件中索引列(由server层下推到storage engine层的索引条件)决定该条记录是否可用,如果可用,则索引定位的记录完整读取出来,让server层根据where条件决定该条记录是否使用。
5、实例演示:
首先有如下表结构:
CREATE TABLE `icp_test` ( |
分析如下操作:
select * from icp_test where code=18 and name like '%A%' ; |
做如下分析:
优化器在没有ICP的条件下:
select * from icp_test where code=18 and name like ‘%A%’ ;
优化器在有ICP的条件下:
分析:
在没有ICP的条件下,虽然有idx_c_n_a(code,name.address)索引,但由于where条件中name like ‘%A%’不使用索引,所以storage engine层只能使用code=18过滤得到4条记录返回到server层,此时server层根据name like ‘%A%’得到两条符合条件的记录返回客户端。
在有ICP的条件下,有idx_c_n_a(code,name,address)索引,where条件中name like ‘%A%’不使用索引,所以storage engine层只能使用code=18过滤得到4条记录,但此时不立即返回server层,由于MySQL5.6版本的索引条件下推(ICP)的特性,stora engine层还会根据索引中的name列name like ‘%A%’过滤得到2条记录返回客户端,此时没有非索引列的where条件,最终返回客户端。
MySQL5.6新特性Index conditontion pushdow的更多相关文章
- [MySQL5.6 新特性] 全局事务标示符(GTID)
GTID的全称为 global transaction identifier , 可以翻译为全局事务标示符,GTID在原始master上的事务提交时被创建.GTID需要在全局的主-备拓扑结构中保持唯 ...
- MySQL5.6 新特性之GTID【转】
转自 MySQL5.6 新特性之GTID - jyzhou - 博客园http://www.cnblogs.com/zhoujinyi/p/4717951.html 背景: MySQL5.6在5.5的 ...
- MySQL5.7新特性
MySQL5.7介绍 身处 MySQL 这个圈子,能够切身地感受到大家对 MySQL 5.7 的期待和热情,似乎每个人都迫不及待的想要了解.学习和使用 MySQL 5.7.那么,我们不禁要问, MyS ...
- mysql5.7新特性探究
一.MySql5.7增加的特性 1.MySql服务方面新特性 1) 初始化方式改变 MySql5.7之前版本初始化方式: scripts/mysql_install_db MySql5.7版本初始化方 ...
- mysql5.6新特性总结
一. server参数默认值设置的变化http://dev.mysql.com/doc/refman/5.6/en/server-default-changes.html 二. innodb增强1.全 ...
- 使用mysql5.7新特性(虚拟列)解决使用前通配符性能问题
众所周知,在mysql里的后通配符可以使用索引查找,前通配查询却无法使用到索引,即使是使用到了索引,也是使用了索引全扫描,效率依然不高,再MySQL5.7之前,一直都没有好的办法解决,但是到了MySQ ...
- 使用mysql5.7新特性解决前通配符查询性能问题
众所周知,在mysql里的后通配符可以使用索引查找,前通配查询却无法使用到索引,即使是使用到了索引,也是使用了索引全扫描,效率依然不高,再MySQL5.7之前,一直都没有好的办法解决,但是到了MySQ ...
- MySQL5.6 新特性之GTID
背景: MySQL5.6在5.5的基础上增加了一些改进,本文章先对其中一个一个比较大的改进"GTID"进行说明. 概念: GTID即全局事务ID(global transactio ...
- [转]MySQL5.6新特性之Multi-Range Read
这几天看到mrr的东西,刚好看到以前我们组的一个小伙的博客,我看挺全的,就转过来了,原博客地址请戳 一 介绍 MySQL 5.6版本提供了很多性能优化的特性,其中之一就是 Multi-Range ...
随机推荐
- 相机标定 matlab opencv ROS三种方法标定步骤(3)
三 , ROS 环境下 如何进行相机标定 刚开始做到的时候遇到一些问题没有记录下来,现在回头写的时候都是没有错误的结果了,首先使用ROS标定相机, 要知道如何查看节点之间的流程图 rosrun r ...
- umount: /home: device is busy
转自:umount: /home: device is busy 取消挂载/home时出现umount: /home: device is busy,原因是因为有程序在使用/home目录,我们可以使用 ...
- window的常用属性
常用属性: 1.closed:用于判断一个指向window对象的引用是否已关闭.请看下面代码: var newWnd = window.open("NewURL.htm",&quo ...
- Php函数完整参考手册
序号 分类 描述 1 Array 函数 2 Calendar 函数 日历扩展包含了简化不同日历格式间的转换的函数. 3 Date/Time 函数 Date/Time 函数用于从 PHP 脚本运行的服务 ...
- concurrent实用类
improt java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.RejectedExecutionHandler; ...
- 🐒-mysql(1)
Mac 终端启动mysql 本文下载的mysql版本为:5.7.17.MySQL Workbench版本为:5.2.47(后面会提及如何选择下载版本) 一.下载MySQL 1.1.访问http://w ...
- HDU 4262 Juggler
点我看题 初步想法是模拟,找到下一个位置并记录操作数,O(n^2)肯定会超时. 那么进行优化,会发现到下一位置的操作数就是两个位置之间存在的数的个数,于是就变成了计数问题. 不难想到用树状数组或线段树 ...
- Spring对jdbc支持
4. Spring对jdbc支持 spring对jdbc提供了很好的支持 体现在: 1.Spring对C3P0连接池的支持很完善 2.Spring对jdbc提供了jdbcTemplate来简化jdbc ...
- bigdecimal使用
float和double类型 一般用于科学计算,用于金融的都用bigdecimal类型.在项目中浮点型数据没有指定 默认是double类型.bigdecimal的构造参数有浮点型和String类型.但 ...
- android ScrollView中嵌套listview listview可点击处理,可展开
public class MyListView extends ListView { public MyListView(Context context, AttributeSet attrs, in ...