mysql 5.6以后,innodb和myisam 哪个查询数据更快。能不能给个证明。
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
亲测(MySQL 版本 5.7.18),分别对 60W、1W 条记录进行测试有索引情况 MyISAM 比 Innodb 查询快,相差微小无索引情况 MyISAM 比 Innodb 查询快,查询速度相差在 1 倍左右
大量的查询,而很少修改(insert update delete) ==> MyISAM
全文搜索支持,且MySQL版本小于5.5 ==> MyISAM
其他情况,请使用innodb
题外话:大部分人都很懒,包括我,估计没有多少“雷锋”会花时间去给你证明一个网上有很多结论的东西。你应该自己搜索一下相关的话题,我相信你能找出一大堆别人做过的比较。如果你对那些结论还是持怀疑态度,可以自己动手去研究,毕竟网上别人做过的比较有可能是比较老的mysql版本。你可以自己搞一个benchmark测试,如果你问怎么搞出一个有说服力的benchmark,或许才是一个更好的问题。
并不能直接了当的说哪个更快,更需要根据业务逻辑来看,不过值得一提的是在网上有一个误区,很多人都认为查询起来myisam一定要比innodb快,的确,当我们在对整个表不加以任何条件进行查询统计时,myisam的确要快一些,这是因为myisam在插入数据的时候会更新表的数据,当我们查询的时候,直接走的统计数量但是,一旦当我们给sql语句加入条件时,innodb并不一定会比myisam慢,因为此时都是走的磁盘或索引,即使是面对第一种情况,我们也可以用一个总数跟进表来统计总数,所以,一般没有特殊情况的话,建议InnoDB.
myisam
innodb
sql
磁盘
索引
总数跟进表
InnoDB
但分析两个引擎情况下,MYISAM要比INNODB快,因为INNODB在做SELECT的时候,要维护的东西比MYISAM引擎多很多:1.INNODB,INNODB要缓存,MYISAM只缓存索引块,这中间还有换进换出的减少。2.INNODB寻址要映射到块,再到行,MYISAM记录的直接是文件的OFFSET,定位比INNODB要快。3.INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护MVCC(Multi-Version Concurrency Control)多版本并发控制
亲测(MySQL 版本 5.7.18),分别对 60W、1W 条记录进行测试
有索引情况 MyISAM 比 Innodb 查询快,相差微小
无索引情况 MyISAM 比 Innodb 查询快,查询速度相差在 1 倍左右
大量的查询,而很少修改(insert update delete) ==> MyISAM
全文搜索支持,且MySQL版本小于5.5 ==> MyISAM
其他情况,请使用innodb
题外话:
大部分人都很懒,包括我,估计没有多少“雷锋”会花时间去给你证明一个网上有很多结论的东西。
你应该自己搜索一下相关的话题,我相信你能找出一大堆别人做过的比较。如果你对那些结论还是持怀疑态度,可以自己动手去研究,毕竟网上别人做过的比较有可能是比较老的mysql版本。你可以自己搞一个benchmark测试,如果你问怎么搞出一个有说服力的benchmark,或许才是一个更好的问题。
并不能直接了当的说哪个更快,更需要根据业务逻辑来看,不过值得一提的是在网上有一个误区,很多人都认为查询起来
myisam
一定要比innodb
快,的确,当我们在对整个表不加以任何条件进行查询统计时,myisam
的确要快一些,这是因为myisam
在插入数据的时候会更新表的数据,当我们查询的时候,直接走的统计数量但是,一旦当我们给
sql
语句加入条件时,innodb
并不一定会比myisam
慢,因为此时都是走的磁盘
或索引
,即使是面对第一种情况,我们也可以用一个总数跟进表
来统计总数,所以,一般没有特殊情况的话,建议InnoDB
.但分析两个引擎情况下,MYISAM要比INNODB快,因为INNODB在做SELECT的时候,要维护的东西比MYISAM引擎多很多:
1.INNODB,INNODB要缓存,MYISAM只缓存索引块,这中间还有换进换出的减少。
2.INNODB寻址要映射到块,再到行,MYISAM记录的直接是文件的OFFSET,定位比INNODB要快。
3.INNODB还需要维护MVCC一致;虽然你的场景没有,但他还是需要去检查和维护MVCC(Multi-Version Concurrency Control)多版本并发控制