美文网首页C++面试题集数据库
MySQL存储引擎InnoDB与MyISAM

MySQL存储引擎InnoDB与MyISAM

作者: saviochen | 来源:发表于2017-08-12 12:07 被阅读73次

    MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但不提供事务支持,而InnoDB提供事务支持已及外部键等高级数据库功能。

    1、MyISAM

    每个MyISAM在磁盘存储成三个文件。文件以表名命名,以拓展名区分文件类型。

    • .frm文件存储表定义。
    • 数据文件的扩展名为.MYD (MYData)。
    • 索引文件的扩展名是.MYI (MYIndex)。

    MyISAM表格可以被压缩,而且他们支持全文搜索。不支持事务,而且不支持外键。如果事务回滚将会造成不完全回滚,不具备原子性。在进行update时,进行锁表并发量相对较小。如果执行大量的select,MyISAM是更好的选择。

    MyISAM的索引和数据是分开的,并且索引式有压缩的,能加载更多索引,内存使用率就对应提高了不少。InnoDB是索引和数据紧密捆绑的,没有使用压缩从而造成InnoDB比MyISAM体积庞大不少。

    MyISAM缓存在内存是索引,而不是数据。而InnoDB缓存在内存的是数据,相对来说,服务器内存越大,InnoDB发挥优势越大。

    • 优点
      查询速度较快,适合大量的select,支持全文索引
    • 缺点
      不支持事务,不支持外键,并发量较小,不适合大量update
    2、InnoDB

    这种类型是事务安全的。它支持外键。在update时表进行行锁,并发量相对较大。如果数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。

    • 优点
      支持事务,支持外键,并发量大,适合大量update
    • 缺点
      查询数据相对较快,不适合大量的select
    3、详细对比(补充两者差别)

    一、InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。

    二、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用

    三、InnoDB支持外键,MyISAM不支持

    四、MyISAM是默认引擎,InnoDB需要指定

    五、InnoDB不支持FULLTEXT类型的索引

    六、InnoDB中不保存表的行数,如select count(*) from table时,InnoDB需要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时MyISAM也需要扫描整个表

    七、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引

    八、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表

    九、InnoDB支持行锁(某些情况下还是锁整表,如 update table set a=1 where user like '%lee%')

    参考文献:
    1、MySQL存储引擎InnoDB与Myisam的六大区别

    相关文章

      网友评论

        本文标题:MySQL存储引擎InnoDB与MyISAM

        本文链接:https://www.haomeiwen.com/subject/nyndrxtx.html