explain mysql 语句,在extra栏里出现 Using index condition 很好奇为什么呢? 是好还是不好?
首先 肯定答案: 是好的!
解释:
Using index condition 叫作 Index Condition Pushdown Optimization (索引下推优化)。
Index Condition Pushdown (ICP)是MySQL使用索引从表中检索行的一种优化。如果没有ICP,存储引擎将遍历索引以定位表中的行,并将它们返回给MySQL服务器,服务器将判断行的WHERE条件。在启用ICP的情况下,如果可以只使用索引中的列来计算WHERE条件的一部分,MySQL服务器就会将WHERE条件的这一部分推到存储引擎中。然后,存储引擎通过使用索引条目来评估推入的索引条件,只有当满足该条件时,才从表中读取行。ICP可以减少存储引擎必须访问基表的次数和MySQL服务器必须访问存储引擎的次数。
ICP的适用性取决于以下条件:
7.触发的条件不能被压制。
4.测试应用于此表的WHERE条件的其余部分。根据测试结果接受或拒绝行
SELECT * FROM people WHERE zipcode='95054' AND lastname LIKE '%etrunia%' AND address LIKE '%Main Street%';
MySQL可以使用索引扫描邮编为'95054'的人。第二部分(lastname LIKE '%etrunia%')不能用于限制必须扫描的行数,因此如果没有ICP,该查询必须检索zipcode='95054'的所有人的完整表行。使用ICP,MYSQL在读取全部行表时,可以先检查
lastname LIKE '%etrunia%' 的部分,这样避免了那部分多的数据的返回。
官方文档解释:https://dev.mysql.com/doc/refman/5.7/en/index-condition-pushdown-optimization.html