专栏首页java技术Mysql常用存储引擎InnoDB和MyISAM的实用对比
原创

Mysql常用存储引擎InnoDB和MyISAM的实用对比

前言

Mysql 5.0版本以后,默认的存储引擎是Innodb,我们常见的存储引擎Innodb、Myisam,存储引擎是相对于表来说的而不是针对数据库,如下图所示,我们可以针对某个表选择对应的存储引擎。

MyISAM

MyISAM引擎

1.mysql默认引擎,不支持事务*

2.表级锁定,更新时,锁定机制是整张表被锁定,其它连接无法更新表的数据,效率比较低下.锁的机制成本很少,但大大降低了并发性能*

3.读写互相阻塞,写的时候阻塞读,读的时候也阻塞写,但读与读之间不阻塞*

4.只对索引进行缓存,虽然key_buffer可以大幅提高性能,减少磁盘IO,但对数据不缓存

5.适合读业务比较多的生产环境,比如BLOG等,读的速度比较快.

6.占用资源比较少.服务器硬件不好时.可以考虑使用

7.数据恢复没有innodb引擎恢复的完美

8.支持全文索引,不支持外键约束

MyISAM引擎应用场景

1.不需要事务支持的场景,读数据多的网站.

2.并发相对较低的业务,因为表级锁定的机制限制

3.数据修改相对较少的业务.阻塞问题

4.对数据要求一致性不高的业务.

InnoDB

InnoDB引擎

1.支持事务,四个级别的事务

2.锁定机制一般是行级锁定.更新时只锁定当前行,其它的行.没关系,可以继续读写.全表扫描.还是表锁

3.读写阻塞与事务的隔离相关,读取速度一般*

4.可以缓存数据和索引,高效的缓存特性

5.支持分区,表空间.

5.适合读写业务比较多的环境,比如BBS等.一般的生产环境,也推荐用innodb.效率高

6.服务器资源开销大

8.支持外键约束,不支持全文索引.

InnoDB引擎应用场景

1.需要事务支持的业务

2.适合高并发的业务,行级锁定.对高并发有很好的适应能力.但要确定查询是通过索引完成.

3.数据更新比较频繁的场景.如BBS

4.数据一致性要求较高

5.硬件设备内存较大时,可以利用innodb较好的缓存能力来提高内存利用率.尽可能的减少磁盘IO

总结

项目如果 需要事务支持或者高并发就选InnoDB;

项目如果 不需要事务支持,且查询需求相对较多可以选择MyISAM;

<hr>

<center>-END-</center>

如果你喜欢我的分享,欢迎关注微信公众号“java学长”分享技术干货!

悄悄告诉你免费赠送重磅互联网架构师教程,提升职场技术水平!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java初学者怎么学习java路线最效率,不走弯路

    如果我们是零基础或者非计算机专业毕业的,或者是计算机毕业的铜须,那么我们的基础我认为是比较不扎实的,换句话来说就是即使作为实习生来说,工作给我们的小任务我们都无...

    java学长
  • 挑战程序竞赛系列(46):4.1Polya 计数定理(2)

    思路: 首先能想到的是Polya计数,但是此题的trick在于还需要控制A或B不能连续出现的次数。

    用户1147447
  • 数据库事务与隔离级别

    事务(transaction)是数据库管理系统的执行单位,可以是一个数据库操作(如Select操作)或者是一组操作序列。事务ACID属性,即原子性(Atomic...

    java达人
  • 从 Spark 的数据结构演进说开

    搞大数据的都知道 Spark,照例,我不会讲怎么用,也不打算讲怎么优化,而是想从 Spark 的核心数据结构的演进,来看看其中的一些设计和考虑,有什么是值得我们...

    Lenis
  • nginx+php-fpm独立节点的部署wordpress笔记

    今天同学说他分开部署nginx+php-fpm出现了问题,总是报502,正好我也没试验过,于是自己也做了一遍,也遇到些问题,记下来以备以后用到。

    二狗不要跑
  • [Redis] redis业务实践 , 这次用哈希

    经常会被人问在什么场景下使用到了redis ? 这个问题和业务是很相关的 , 脱离业务需求的回答都不能说服别人.

    陶士涵
  • 数据库备份拿webshell

    数据库备份拿webshell算是比较老的web后台才有的一个漏洞,之前也做过类似的,这次偶然有机会帮朋友看来一个类似的站,所以在此分享一下。仅供学习,严守底线。

    HACK学习
  • PTA 6-2 多项式求值

    本题要求实现一个函数,计算阶数为n,系数为a[0] ... a[n]的多项式$f(x)=\sum_{i=0}^{n}(a[i]\times x^i)$在x点的值...

    林德熙
  • 通过ODBC接口访问人大金仓数据库

      国产化软件和国产化芯片的窘境一样,一方面市场已经存在性能优越的同类软件,成本很低,但小众的国产化软件不仅需要高价买入版权,并且软件开发维护成本高;另一方面,...

    waylon
  • 架构思考-业务快速增长时的容量问题

    之前做过一个项目,数据库存储采用的是mysql。当时面临着业务指数级的增长,存储容量不足。当时采用的措施是

    静儿

扫码关注云+社区

领取腾讯云代金券