加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

详解MySQL数据库的Index Condition Pushdown(ICP)特性

发布时间:2019-07-22 19:54:08 所属栏目:移动互联 来源:佚名波波说运维
导读:概述 本日首要先容一下mysql的ICP特征,也许许多人都没听过,这里用一个尝试来辅佐各人加深一下领略。 一、Index_Condition_Pushdown Index Condition Pushdown (ICP)是MySQL用索引去内外取数据的一种优化。假如禁用ICP,引擎层会穿过索引在基表中探求数据
副问题[/!--empirenews.page--]

 概述

本日首要先容一下mysql的ICP特征,也许许多人都没听过,这里用一个尝试来辅佐各人加深一下领略。

详解MySQL数据库的Index Condition Pushdown(ICP)特征

一、Index_Condition_Pushdown

Index Condition Pushdown (ICP)是MySQL用索引去内外取数据的一种优化。假如禁用ICP,引擎层会穿过索引在基表中探求数据行,然后返回给MySQL Server层,再去为这些数据行举办WHERE后的前提的过滤。

ICP启用,假如部门WHERE前提能行使索引中的字段,MySQL Server 会把这部门下推到引擎层。存储引擎通过行使索引条目,然后推索引前提举办评估,行使这个索引把满意的行从表中读取出。ICP能镌汰引擎层会见基表的次数和MySQL Server 会见存储引擎的次数。总之是 ICP的优化在引擎层就可以或许过滤掉大量的数据,这样无疑可以或许镌汰了对base table和mysql server的会见次数。

ICP的优化用于range, ref, eq_ref, and ref_or_null会见要领,当这些必要会见全表的行。这个计策可以用于INNODB和MyISAM表。

二、尝试

先从一个简朴的尝试开始直观熟悉ICP的浸染。

1、导入示例数据

这里行使Employees Sample Database,作为示例数据库。

详解MySQL数据库的Index Condition Pushdown(ICP)特征

将下载的压缩包解压后,会看到一系列的文件,个中employees.sql就是导入数据的呼吁文件。执行

  1. #yum -y install bzip2 
  2. #tar -xvf employees_db-full-1.0.6.tar.bz2 
  3. #mysql -uroot -p<employees.sql 
详解MySQL数据库的Index Condition Pushdown(ICP)特征

就可以完成建库、建表和load数据等一系列操纵。此时数据库中会多一个叫做employees的数据库。库中的表如下:

  1. mysql > SHOW TABLES; 
详解MySQL数据库的Index Condition Pushdown(ICP)特征

下面将行使employees表做尝试。

2、成立连系索引

employees表包括雇员的根基信息,表布局如下:

  1. mysql > DESC employees.employees; 
详解MySQL数据库的Index Condition Pushdown(ICP)特征

这个表默认只有一个主索引,由于ICP只能浸染于二级索引,以是我们成立一个二级索引:

  1. ALTER TABLE employees.employees ADD INDEX first_name_last_name (first_name, last_name); 

这样就成立了一个first_name和last_name的连系索引。

详解MySQL数据库的Index Condition Pushdown(ICP)特征

3、查询(ICP启用)

为了明晰看到查询机能,启用profiling并封锁query cache:

  1. SET profiling = 1; 
  2. SET query_cache_type = 0; 
  3. SET GLOBAL query_cache_size = 0; 
详解MySQL数据库的Index Condition Pushdown(ICP)特征

然后看下面这个查询:

  1. mysql > SELECT * FROM employees WHERE first_name='Mary' AND last_name LIKE '%man'; 
详解MySQL数据库的Index Condition Pushdown(ICP)特征

按照MySQL索引的前缀匹配原则,两者对索引的行使是同等的,即只有first_name回收索引,last_name因为行使了恍惚前缀,没法行使索引举办匹配。我将查询接洽执行三次,功效如下:

  1. mysql> show profiles; 
详解MySQL数据库的Index Condition Pushdown(ICP)特征

查察执行打算

  1. mysql> explain SELECT * FROM employees WHERE first_name='Mary' AND last_name LIKE '%man'; 
详解MySQL数据库的Index Condition Pushdown(ICP)特征

4、查询(ICP禁用)

封锁ICP:

  1. SET optimizer_switch='index_condition_pushdown=off'; 
详解MySQL数据库的Index Condition Pushdown(ICP)特征

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读