关于MySQL的Myisam和Innodb的一些比较总结

系统 1711 0

总结一下MySQL的Myisam和Innodb引擎的一些差别,权当复习了。

首先二者在 文件构成 上:

 

  • Myisam会存储三个文件:.frm 存储表结构,.MYD存储表的数据,.MYI文件存储表的索引;所以完整的拷贝一张表这三个文件都需要。另外Myisam会对索引进行压缩。用Myisam备份会更简单。
  • Innodb也有 .frm表结构文件,但是数据存储就不同了,由于有表空间的概念,所以数据文件可能是独立的,也可能是空闲的,独立的话数据和索引都会在一个.ibd文件内。
事务 的支持:
  • Myisam不支持;所以如果你真的需要诸如事务,外键等特性,放弃它吧。
  • Innodb支持 事物,回滚等一些事务安全的ACID特性,支持外键。
  • Myisam只支持表锁,意即如果你执行了一条DML(数据操纵语言,即增删改查)语句,整张表会获得一把锁,在操作执行完之前其他人不能够再操作这张表了,所以如果表的并发高,Myisam性能会差一些
  • Myisam支持行锁,即可以只给某一行上锁而非整个表,所以在并发情况下,Update之类的操作性能会更好。当然如果一条SQL语句不能确定扫描范围时,也会锁表,诸如where like'%'的操作。更简单来说,Innodb使用where检索的列没有索引,那么就会锁表了。
DML (Insert, Select, Update, Delete):
  • Select:一般认为Myisam的读性能会比Innodb更好,所以如果是个读多写少的项目,这点上Myisam可以有加分。
  • Insert:这个要分情况来说,单线程操作,Myisam明显会快,但是并发多的话就不一定了。还有需要说明的是Myisam支持Insert Delayed操作,如果你的应用可以接受这种使用方式(可能延迟一下才生效),那么它会更好一些
  • Update:一般认为Innodb更快
  • Delete:Innodb,它会一行行的删除表,而不是重新建立表
其他:
  • count(*)  :Myisam会保存表的具体行数,而innodb不会,所以你在用phpmyadmin来查看时,表的行数会显示'~'大约多少行。所以select count(*) 用Myisam当然快,不过这是不加where条件的情况下
  • Myisam还支持全文索引,比如说搜索诸如某些text字段时 where * like "%*"时性能和效率会更好
  • Auto_Increment:Innodb必须包含只有该字段的索引,而Myisam可以使用联合索引。
  • Myisam建立的表可以使用Myisam_merge引擎,在某些情况下很有用。

 

 

关于MySQL的Myisam和Innodb的一些比较总结


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论