关于执行计划的 Extra 字段,对这几个取值有一些疑惑,我说一下我的大致理解。
Using where:表示优化器需要通过索引回表查询数据;
Using index:表示直接访问索引就足够获取到所需要的数据,不需要通过索引回表;
Using index condition:在5.6版本后加入的新特性(Index Condition Pushdown);
Using index condition 会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行;Using where && Using index:这个确实不了解它和 Using index condition 的区别。
然后,我在 MySQL 的示例数据库 Sakila 中做了一些测试,但是结果却让我感到非常疑惑:
测试使用 Sakila.rental 表,表中的 customer_id 建立了名为 idx_fk_customer_id 索引。