MySQL 5.6新特性 -- Index Condition Pushdown


- set optimizer_switch = 'index_condition_pushdown=off';
- set optimizer_switch = 'index_condition_pushdown=on';
测试过程
1.环境准备
- #mysql 5.6.25
- #关闭结果缓存
- mysql> set global query_cache_size=0;
- mysql> set query_cache_type=off;
- #查看表结构
- mysql> show create table employees\G
- *************************** 1. row ***************************
- Table: employees
- Create Table: CREATE TABLE `employees` (
- `emp_no` int(11) NOT NULL,
- `birth_date` date NOT NULL,
- `first_name` varchar(14) NOT NULL,
- `last_name` varchar(16) NOT NULL,
- `gender` enum('M','F') NOT NULL,
- `hire_date` date NOT NULL,
- PRIMARY KEY (`emp_no`),
- KEY `idx_first_last_name` (`first_name`,`last_name`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 1 row in set (0.00 sec)
- mysql>
2.开启ICP后进行测试
- mysql> set profiling = 1;
- mysql> select * from employees where first_name='Anneke' and last_name like '%sig' ;
- mysql> explain select * from employees where first_name='Anneke' and last_name like '%sig' ;
- mysql> show profiles;
- mysql> show profile cpu,block io for query 1;
3.关闭ICP后进行测试
- mysql> set optimizer_switch='index_condition_pushdown=off';
- mysql> set profiling = 1;
- mysql> select * from employees where first_name='Anneke' and last_name like '%sig' ;
- mysql> explain select * from employees where first_name='Anneke' and last_name like '%sig' ;
- mysql> show profiles;
- mysql> show profile cpu,block io for query 1;
4.结果比较
开启ICP后的执行计划:执行计划中extra部分的内容是"using index condition"
- mysql> explain select * from employees where first_name='Anneke' and last_name like '%sig' ;
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------+------+-----------------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------+------+-----------------------+
- | 1 | SIMPLE | employees | ref | idx_first_last_name | idx_first_last_name | 44 | const | 224 | Using index condition |
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------+------+-----------------------+
关闭ICP后的执行计划:执行计划中extra部分的内容是"using where"
- mysql> explain select * from employees where first_name='Anneke' and last_name like '%sig' ;
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------+------+-------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------+------+-------------+
- | 1 | SIMPLE | employees | ref | idx_first_last_name | idx_first_last_name | 44 | const | 224 | Using where |
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------+------+-------------+
开启ICP后的profile内容:Sending data部分的值是0.000212s
- mysql> show profile cpu,block io for query 1;
- +----------------------+----------+----------+------------+--------------+---------------+
- | Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
- +----------------------+----------+----------+------------+--------------+---------------+
- | starting | 0.000114 | 0.000000 | 0.000000 | 0 | 0 |
- | checking permissions | 0.000007 | 0.000000 | 0.000000 | 0 | 0 |
- | Opening tables | 0.000018 | 0.000000 | 0.000000 | 0 | 0 |
- | init | 0.000034 | 0.000000 | 0.000000 | 0 | 0 |
- | System lock | 0.000008 | 0.000000 | 0.000000 | 0 | 0 |
- | optimizing | 0.000023 | 0.000000 | 0.000000 | 0 | 0 |
- | statistics | 0.000383 | 0.000000 | 0.000000 | 0 | 0 |
- | preparing | 0.000019 | 0.000000 | 0.000000 | 0 | 0 |
- | executing | 0.000002 | 0.000000 | 0.000000 | 0 | 0 |
- | Sending data | 0.000212 | 0.000000 | 0.000000 | 0 | 0 |
- | end | 0.000004 | 0.000000 | 0.000000 | 0 | 0 |
- | query end | 0.000004 | 0.000000 | 0.000000 | 0 | 0 |
- | closing tables | 0.000006 | 0.000000 | 0.000000 | 0 | 0 |
- | freeing items | 0.000020 | 0.000000 | 0.000000 | 0 | 0 |
- | cleaning up | 0.000011 | 0.000000 | 0.000000 | 0 | 0 |
- +----------------------+----------+----------+------------+--------------+---------------+
关闭ICP后的profile内容:Sending data部分的值是0.010990s
- mysql> show profile cpu,block io for query 1;
- +----------------------+----------+----------+------------+--------------+---------------+
- | Status | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out |
- +----------------------+----------+----------+------------+--------------+---------------+
- | starting | 0.000165 | 0.000000 | 0.000000 | 0 | 0 |
- | checking permissions | 0.000022 | 0.000000 | 0.000000 | 0 | 0 |
- | Opening tables | 0.000027 | 0.000000 | 0.000000 | 0 | 0 |
- | init | 0.000039 | 0.000000 | 0.000000 | 0 | 0 |
- | System lock | 0.000008 | 0.000000 | 0.000000 | 0 | 0 |
- | optimizing | 0.000037 | 0.001000 | 0.000000 | 0 | 0 |
- | statistics | 0.000483 | 0.001000 | 0.000000 | 0 | 0 |
- | preparing | 0.000022 | 0.000000 | 0.000000 | 0 | 0 |
- | executing | 0.000002 | 0.000000 | 0.000000 | 0 | 0 |
- | Sending data | 0.010990 | 0.007999 | 0.002000 | 0 | 0 |
- | end | 0.000009 | 0.000000 | 0.000000 | 0 | 0 |
- | query end | 0.000005 | 0.000000 | 0.000000 | 0 | 0 |
- | closing tables | 0.000008 | 0.000000 | 0.000000 | 0 | 0 |
- | freeing items | 0.000028 | 0.000000 | 0.000000 | 0 | 0 |
- | cleaning up | 0.000014 | 0.000000 | 0.000000 | 0 | 0 |
- +----------------------+----------+----------+------------+--------------+---------------+
其它:
当sql使用覆盖索引时,不支持ICP优化方法
- mysql> explain select first_name,last_name from employees where first_name='Anneke' and last_name='Porenta' ;
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------------+------+--------------------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------------+------+--------------------------+
- | 1 | SIMPLE | employees | ref | idx_first_last_name | idx_first_last_name | 94 | const,const | 1 | Using where; Using index |
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------------+------+--------------------------+
- mysql> explain select * from employees where first_name='Anneke' and last_name='Porenta' ;
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------------+------+-----------------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------------+------+-----------------------+
- | 1 | SIMPLE | employees | ref | idx_first_last_name | idx_first_last_name | 94 | const,const | 1 | Using index condition |
- +----+-------------+-----------+------+---------------------+---------------------+---------+-------------+------+-----------------------+
MySQL 5.6新特性 -- Index Condition Pushdown的更多相关文章
- 1229【MySQL】性能优化之 Index Condition Pushdown
转自http://blog.itpub.net/22664653/viewspace-1210844/ [MySQL]性能优化之 Index Condition Pushdown2014-07-06 ...
- 【MySQL】性能优化之 Index Condition Pushdown
一 概念介绍 Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式.a 当关闭ICP时,index ...
- [MySQL] 联合索引与using index condition
1.测试联合索引的最左原则的时候, 发现了5.6版本后的新特性Index Condition Pushdown 2.含义就是存储引擎层根据索引尽可能的过滤数据,然后在返回给服务器层根据where其他条 ...
- MySQL ICP(Index Condition Pushdown)特性
一.SQL的where条件提取规则 在ICP(Index Condition Pushdown,索引条件下推)特性之前,必须先搞明白根据何登成大神总结出一套放置于所有SQL语句而皆准的where查询条 ...
- 【mysql】关于Index Condition Pushdown特性
ICP简介 Index Condition Pushdown (ICP) is an optimization for the case where MySQL retrieves rows from ...
- 浅析MySQL中的Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
本文出处:http://www.cnblogs.com/wy123/p/7374078.html(保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误 ...
- MySQL 中Index Condition Pushdown (ICP 索引条件下推)和Multi-Range Read(MRR 索引多范围查找)查询优化
一.ICP优化原理 Index Condition Pushdown (ICP),也称为索引条件下推,体现在执行计划的上是会出现Using index condition(Extra列,当然Extra ...
- MySQL 之 Index Condition Pushdown(ICP)
简介 Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式. 当关闭ICP时,index 仅仅是data ...
- MySQL Index Condition Pushdown
Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式.[Index Condition Pushdown] ...
随机推荐
- Kylin的简介与安装部署
一.Kylin的概述 官方网址:http://kylin.apache.org/cn/ Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析 ...
- C. 【UNR #2】黎明前的巧克力
题解: 不会FWT,只能水40分了 首先,要观察出的性质就是: 选出的集合要满足所有数亦或等于0,而在其中任选子集都可以满足条件,答案就等于sigma(2^size(s)) 这样dp一波显然就可以O( ...
- python全栈开发day12-函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数、global和nonlocal的进一步解析和总结
1.上周回顾 1).函数名的应用 直接打印函数名,是函数的地址 变量 函数的参数 函数的返回值 可以当容器类数据类型的元素 2).闭包 内层函数对外层函数的非全局变量的引用,就是闭包. 并返回内部函数 ...
- HDU 1025 城市供应 【LIS】
题目链接:https://vjudge.net/contest/228455#problem/A 题目大意: 有2n个城市,其中有n个富有的城市,n个贫穷的城市,其中富有的城市只在一种资源富有,且富有 ...
- 查找mac下腾讯视频下载地址
mac 腾讯视频下载的视频是不可见的,也许是因为版权原因吧.使用以下方法可以在文件中找到缓存的视频(不过都是被断开的很多短视频). 在terminal输入: cd Library/Containers ...
- 最全的JS判断是否为中文的方法
第一种代码:EXFCODE:1 function isChinese(temp)2 {3 var re=/[^/u4e00-/u9fa5]/;4 if (re. ...
- ELASTIC API
运维常用API. curl -XGET 'localhost:9200/_cat/indices?v&pretty' #查看索引 curl -XGET 'localhost:9200/_cat ...
- Reactor 3 学习笔记(2)
接上篇继续学习各种方法: 4.9.reduce/reduceWith @Test public void reduceTest() { Flux.range(1, 10).reduce((x, y) ...
- 让.Net程序支持命令行启动
很多时候,我们需要让程序支持命令行启动,这个时候则需要一个命令行解析器,由于.Net BCL并没有内置命令行解析库,因此需要我们自己实现一个.对于简单的参数来说,自己写一个字符串比较函数来分析args ...
- asp.net mvc流程图4.6以前