多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在explain语句中type反应了访问类型.访问类型有很多种.从全表扫描到索引扫描,范围扫描,唯一索引扫描,常数引用等 这里列的这些,速度是从慢到快,扫描的行数也是从小到大.你不需要记住这些访问类型,但需要明白扫描表,扫描索引,范围访问和单值访问的概念 我们来看个例子 ~~~ select * from sakila.film_actor where film_id = 1; ~~~ 这个查询将返回10行数据,从explain的结果可以看到,mysql在索引`idx_fk_film_id`上使用了ref访问类型来执行查询 ![](https://box.kancloud.cn/e93f4e607643e29305a2d1fb4dccb7ea_498x221.png) explain的结果显示预估要访问10行数据. 如果没有索引的话,mysql就要用全表扫描了 ![](https://box.kancloud.cn/685e18dbe603f1610be0256d2620118e_556x258.png) 这里的Using Where表示mysql将通过where条件来筛选存储引擎返回的结果记录 一般mysql能够使用如下三种方式应用where条件,从好到坏依次为 * 在索引中使用where条件来过滤不匹配的记录.这是在存储引擎层完成的 * 使用索引覆盖扫描(在Extra列中出现了Using index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果.这是在mysql服务层完成的,但无需在回表查询 * 从数据表中返回数据,然后过滤不满足条件的记录(在Extra列中出现Using where).这在mysql服务层完成的,Mysql需要先从数据表中读取记录然后过滤.