bitscn.com
创建2张用户表user、user2,表结构相同,但user表使用innodb存储引擎,而user2表则使用 myisam存储引擎。
-- table user ddlcreate table `user` ( `id` int(11) not null auto_increment, `name` varchar(50) default null, `email` varchar(100) default null, `age` tinyint(4) default null, `nickname` varchar(50) default null, primary key (`id`), unique key `email` (`email`), key `name` (`name`), key `age` (`age`)) engine=innodb default charset=utf8;-- table user2 ddlcreate table `user2` ( `id` int(11) not null auto_increment, `name` varchar(50) default null, `email` varchar(100) default null, `age` tinyint(4) default null, `nickname` varchar(50) default null, primary key (`id`), unique key `email` (`email`), key `name` (`name`), key `age` (`age`)) engine=myisam auto_increment=131610 default charset=utf8;
分别插入10w条测试数据到表user & user2。
100 /g;
图1
explain select * from user2 where id>100 /g;
图2
user 表中的数据和 user2 表中的数据是一样的,索引结构也是一样的,只不过它们的存储引擎不同。在图1中,查询用到了primary主键索引,而查询优化器预估的结果大概在65954行左右(实际是131513);在图2中,查询却没有使用索引,而是全表扫描了,返回的预估结果在131608行(实际是131509)。
explain select * from user where id>100 and age>50 /g;
图3
explain select * from user where id>100 and age=50 /g;
图4
explain select * from user2 where id>100 and age>50 /g;
图5
explain select * from user2 where id>100 and age=50 /g;
图6
分享一个不错的博客,《理解mysql--索引和优化》
bitscn.com