查询了很多资料,都说myisam查询快。但通过试验,居然得出相反的结论,操作如下
1.建表tbl_idcard_myisam、tbl_idcard_innodb,两表字段相同,引擎不同,id_card有相同索引,同样的100W数据(数据也是一摸一样)
CREATE TABLE `tbl_idcard_myisam` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `create_time` datetime DEFAULT NULL, `id_card` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`), KEY `index_tbl_idcard_myisam` (`id_card`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
2.根据id_card查询,id_card是身份证号,写个了随机函数,依次对两张表分别查询10W、100W次,结果如下
for (int i = 0; i < num; i++) { testIdcardInnodbService.queryByIdcard(IdCardCreate.generate()); } num=100000 , myisamSpendTime = 85790毫秒 -- 单独查询myisam num=100000 , innodbSpendTime = 72805毫秒 -- 单独查询innodb num=1000000 , myisamSpendTime = 844717毫秒 -- 单独查询myisam num=1000000 , innodbSpendTime = 673824毫秒 -- 单独查询innodb
结论:Innodb查询更快!和相关资料相反,这是为什么?
方案推荐指数:50
这个我觉得还要看具体的设置。
比如 myisam引擎一个很重要的参数就是 key_buffer_size.
而 innodb引擎的一个重要参数就是 innodb_buffer_pool_size。
你看看这两个参数的设置。
方案推荐指数:25
方案推荐指数:10
建议楼主看下《高性能MySQL》,里面对innodb的读写性能有很大篇幅的解释,虽然说5.1之前myisam的读比innodb快很多,但是在5.1之后,默认引擎变为innodb,innodb的读写有很大的提高,并且在数据量很大的情况下,innodb有时比myisam快,并且myisam存在数据恢复时间长,无事务等问题或短板,官方建议将myisam都换为innodb。
方案推荐指数:5
楼上说的都对
方案推荐指数:10
如果你有兴趣的话,可以深入研究。谁快谁慢,都不可能是绝对的,不同的适应场景、不同的配置等都会影响查询的结果,所以像这种比较,都是不断去试验的。