mysql explain 的using where 到底是什么意思?

高性能mysql上说 using where 意味着mysql服务器将在存储引擎检索行后再进行过滤。

clipboard.png

clipboard.png

第一次我做如下的explain

clipboard.png
我的理解是这次查询在存储引擎层就使用了where,所以不用在mysql服务器层过滤。

第二次explain

clipboard.png
这里为什么还有using where?不是已经在存储引擎层做了过滤了吗?

第三次explain

clipboard.png

varchar类型的查询,无论用=、like都会有using where。这里应该也是在存储引擎层就过滤好了吧?

阅读 15.5k
2 个回答

过滤都在服务器层过滤的吧,除非Extra出现using index condition。

CREATE TABLE documents  (
id int(11) NOT NULL  AUTO_INCREMENT,
group_id int(11) NOT NULL,
group_id2 int(11) NOT NULL,
date_added datetime NOT NULL,
title varchar(255) NOT NULL,
content text not NULL,
PRIMARY KEY (id),
key idx_title(title),
key idx_gid(group_id)
) ENGINE = InnoDB AUTO_INCREMENT=5 CHARACTER SET = utf8 ;
explain select *from documents where title='1';

执行计划如下:

image.png

没有 Using where,跟楼主截图不一样。

Using where 表示是否存在 where 子句限制,需要对结果集进行筛选后返回。直接使用 Using where 表示进行全表扫描,通过 where 子句筛选。同时出现 Using where,Using index 表示从普通索引中取出数据,用 where 条件筛选。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题