Index Condition Pushdown(ICP)索引条件下推优化适用于mysql在table中通过index检索数据行,没有ICP,存储引擎层遍历索引来定位基表(base table)上的数据行并且把它们返回给server层,由server层来计算过滤where语句.使用ICP,并且where语句的部分筛选条件可以通过index来检测,则mysql server层会讲部分where 条件下推给存储引擎层。存储引擎通过使用index条目来评估下推的index condition,并且仅仅读取满足index condition的数...
分享到: 对index condition pushdown很感兴趣,并且跟踪代码让自己受益良多,因此就来跟一下相关代码。看的是mysql5.6.7-rc官方社区版。先说说我对研究MySQL源码的看法:每个使用MySQL数据库的人都应该看代码吗?不是的,那意味着MySQL数据库的使用门槛太高,几乎不可用;但另一方面,如果看MySQL代码的人多了,意味着有更多的人对MySQL数据库的了解更加深入。能够进一步推动MySQL数据库广泛而恰当地使用,为使用者、相关从业者...
empolyeesmysql> desc employees.employees; +------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+---------------+------+-----+---------+-------+ | emp_no | int(11) | NO | PRI | NULL | | | birth_date | date | NO | | NULL | | | first_name | varchar(14) | NO | | NULL...
其它环境下的安装请参考MariaDB官网关于下载安装的文档。导入示例数据与前文一样,我们使用Employees Sample Database,作为示例数据库。完整示例数据库的下载地址为:https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2。将下载的压缩包解压后,会看到一系列的文件,其中employees.sql就是导入数据的命令文件。执行 mysql -h[host] -u[user] -p < employees.sql就可以完成建库、建表...
20.2.10. 条件和处理程序20.2.10.1. DECLARE条件 20.2.10.2. DECLARE处理程序特定条件需要特定处理。这些条件可以联系到错误,以及子程序中的一般流程控制。20.2.10.1. DECLARE条件DECLARE condition_name CONDITION FOR condition_value condition_value: SQLSTATE [VALUE] sqlstate_value | mysql_error_code 这个语句指定需要特殊处理的条件。它将一个名字和指定的错误条件关联起来。这个名字可以随后被用在DECLARE HAND...
* FROM peopleWHERE zipcode=‘95054‘AND lastname like ‘%etrunia%‘AND address LIKE ‘%Main Street%‘;对于上述语句,数据库可以通过索引来定位zipcode等于95054的记录,但是索引对where条件的lastname LIKE ‘%etrunia%‘ AND address like ‘%Main Street%‘没有任何帮助。若不支持ICP优化,数据库需要先通过索引取出所有zipcode等于95054的记录,然后在过滤WHERE之后的两个条件 若支持ICP,在索引取出时,就会进行WHERE条...
第一个例子在网上非常多,也非常容易理解.具体表结构见上文(http://www.cnblogs.com/wy123/p/7366486.html) 下面用到的test_orderdetail表的索引为:create index idx_orderid_productname on test_orderdetail(order_id,product_name);查询语句为:select * from test_orderdetail where order_id = 10900 and product_name like ‘%00163e0496af%‘;显然,order_id = 10900是可以直接进行索引查找的,虽然product_name也包含在...
第一个例子在网上非常多,也非常容易理解.具体表结构见上文(http://www.cnblogs.com/wy123/p/7366486.html) 下面用到的test_orderdetail表的索引为:create index idx_orderid_productname on test_orderdetail(order_id,product_name);查询语句为:select * from test_orderdetail where order_id = 10900 and product_name like ‘%00163e0496af%‘;显然,order_id = 10900是可以直接进行索引查找的,虽然product_name也包含在...
Index Condition Pushdown(ICP)是针对mysql使用索引从表中检索行数据时的一种优化方法。 在没有ICP特性之前,存储引擎根据索引去基表查找并将数据返回给mysql server,mysql server再根据where条件进行数据过滤。 有了ICP之后,在取出索引的同时,判断是否可以根据索引中的列进行where条件过滤,也就是将where的部分过滤操作放在了存储引擎层。这样就会减少上层sql层对记录的获取。 ICP优化支持range、ref、eq_ref、ref_or_nul...
> use employees ;> show create table employees \G***************************[ 1. row ]***************************Table | employeesCreate 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`)) ENGINE=Inn...
| +----+-------------+-----------+------+---------------+--------------+---------+-------+------+-----------------------+ 1 row in set (0.00 sec)ICP 关闭时的执行计划显示use where.mysql> explain select * from employees where first_name=‘Anneke‘ and last_name like ‘%nta‘ ; +----+-------------+-----------+------+---------------+--------------+---------+-------+------+-------------+ | id | select_...
其它环境下的安装请参考MariaDB官网关于下载安装的文档。 导入示例数据 与前文一样,我们使用Employees Sample Database,作为示例数据库。完整示例数据库的下载地址为:https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2。 将下载的压缩包解压后,会看到一系列的文件,其中employees.sql就是导入数据的命令文件。执行mysql -h[host]-u[user]-p < employees.sql就可以完成建库、建表...
关于如何理解MySQL执行计划中Extra列的Using where、Using Index、Using index condition,Using index,Using where这四者的区别。首先,我们来看看官方文档关于三者的简单介绍(官方文档并没有介绍Using index,Using where这种情况): Using index (JSON property: using_index) The column information is retrieved from the table using only information in the index tree without having to do an additional seek t...
其它环境下的安装请参考MariaDB官网关于下载安装的文档。 导入示例数据 与前文一样,我们使用Employees Sample Database,作为示例数据库。完整示例数据库的下载地址为:https://launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-full-1.0.6.tar.bz2。 将下载的压缩包解压后,会看到一系列的文件,其中employees.sql就是导入数据的命令文件。执行mysql -h[host] -u[user] -p < employees.sql就可以完成建库、建...
Using where:表示优化器需要通过索引回表查询数据;Using index:表示直接访问索引就足够获取到所需要的数据,不需要通过索引回表;Using index condition:在5.6版本后加入的新特性(Index Condition Pushdown);Using index condition 会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行; using index condition = using index + 回表 + where 过滤mysql> explain ...