高性能mysql上说 using where 意味着mysql服务器将在存储引擎检索行后再进行过滤。
第一次我做如下的explain
我的理解是这次查询在存储引擎层就使用了where,所以不用在mysql服务器层过滤。
第二次explain
这里为什么还有using where?不是已经在存储引擎层做了过滤了吗?
第三次explain
varchar类型的查询,无论用=、like都会有using where。这里应该也是在存储引擎层就过滤好了吧?
高性能mysql上说 using where 意味着mysql服务器将在存储引擎检索行后再进行过滤。
第一次我做如下的explain
我的理解是这次查询在存储引擎层就使用了where,所以不用在mysql服务器层过滤。
第二次explain
这里为什么还有using where?不是已经在存储引擎层做了过滤了吗?
第三次explain
varchar类型的查询,无论用=、like都会有using where。这里应该也是在存储引擎层就过滤好了吧?
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';
执行计划如下:
没有 Using where,跟楼主截图不一样。
Using where 表示是否存在 where 子句限制,需要对结果集进行筛选后返回。直接使用 Using where 表示进行全表扫描,通过 where 子句筛选。同时出现 Using where,Using index 表示从普通索引中取出数据,用 where 条件筛选。
5 回答3.3k 阅读✓ 已解决
3 回答3.7k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
5 回答1.4k 阅读
2 回答2.1k 阅读
3 回答2k 阅读
1 回答3.6k 阅读
过滤都在服务器层过滤的吧,除非Extra出现using index condition。