Mysql explain-Extra(using where,using index)使用详解
2018-03-13 11:27
465 查看
下面是测试用例,楼主的测试使用的MySQL版本是5.6.27-log。
show create table user_man;
CREATE TABLE `user_man` (
`manid` bigint(20) NOT NULL AUTO_INCREMENT,
`manname` varchar(32) DEFAULT NULL,
`manage` int(6) DEFAULT NULL,
`upd_time` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`blacklist` bigint(20) DEFAULT '-1' COMMENT '-1,1',
PRIMARY KEY (`manid`),
KEY `IDX_MN` (`manname`) USING BTREE,
KEY `IDX_MID` (`manid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
下面的情况可能跟我的建表和数据量有关系,可能还有其他情况会符合的,希望大家多多留言一起探讨。不过下面的这个我都是测试过好几次了的,可以说是没有问题的。
#Extra 情况
#(1)using index condition ,先在二级索引上使用索引查找到主键ID,然后在主键索引上通过主键ID进行查找。这里之所以需要去主键索引上查,是因为select 需要的数据,二级索引不能完全提供
explain SELECT * from user_man where manname = 'zzk';
# (2)using where ,直接在主键索引上过滤数据,必带where子句,而且用不上索引
explain select * from user_man where manage in (9,10);
#(3)using index,直接在主键索引上完成查询和所有数据的获取,一般是只获取主键ID
explain select manid from user_man
# (4)Using where; Using index,直接在二级索引(覆盖索引)上获取全部数据
explain select manname,manid from user_man where manname = 'yjz'
show create table user_man;
CREATE TABLE `user_man` (
`manid` bigint(20) NOT NULL AUTO_INCREMENT,
`manname` varchar(32) DEFAULT NULL,
`manage` int(6) DEFAULT NULL,
`upd_time` timestamp NOT NULL DEFAULT '2000-01-01 00:00:00' ON UPDATE CURRENT_TIMESTAMP,
`blacklist` bigint(20) DEFAULT '-1' COMMENT '-1,1',
PRIMARY KEY (`manid`),
KEY `IDX_MN` (`manname`) USING BTREE,
KEY `IDX_MID` (`manid`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
下面的情况可能跟我的建表和数据量有关系,可能还有其他情况会符合的,希望大家多多留言一起探讨。不过下面的这个我都是测试过好几次了的,可以说是没有问题的。
#Extra 情况
#(1)using index condition ,先在二级索引上使用索引查找到主键ID,然后在主键索引上通过主键ID进行查找。这里之所以需要去主键索引上查,是因为select 需要的数据,二级索引不能完全提供
explain SELECT * from user_man where manname = 'zzk';
# (2)using where ,直接在主键索引上过滤数据,必带where子句,而且用不上索引
explain select * from user_man where manage in (9,10);
#(3)using index,直接在主键索引上完成查询和所有数据的获取,一般是只获取主键ID
explain select manid from user_man
# (4)Using where; Using index,直接在二级索引(覆盖索引)上获取全部数据
explain select manname,manid from user_man where manname = 'yjz'
相关文章推荐
- mysql中 执行计划的extra字段---- using where , using index 和 using where & using index 整理
- mysql之explain详解(分析索引的最佳使用)
- mysql之explain详解(分析索引的最佳使用)
- mysql中 explain使用详解
- 【Explain】mysql之explain详解(分析索引的最佳使用)
- MySQL中explain执行计划中额外信息字段(Extra)详解
- mysql之explain使用详解(分析索引)
- mysql之explain详解(分析索引的最佳使用)
- Mysql中mysqldump命令使用详解
- MySQL中的mysqldump命令使用详解
- MySQL中的mysqldump命令使用详解[转]
- FreeBSD学习笔记11-pureftpd使用详解(4)-:用MySQL管理PureFTPd用户
- Mysql中sqldump命令使用详解
- MySQL中的mysqldump命令使用详解
- MySQL备份-mysqldump命令使用详解
- MySQL中的mysqldump命令使用详解
- Windows+OpenLDAP+MySQL配置及使用详解(一)——基础配置
- Mysql中mysqldump命令使用详解
- MySQL备份-mysqldump命令使用详解--net-work
- Java中使用MySQL从安装、配置到实际程序测试详解