美文网首页
MySQL的InnoDB与MyISAM的区别

MySQL的InnoDB与MyISAM的区别

作者: 雁阵惊寒_zhn | 来源:发表于2020-10-25 11:35 被阅读0次

MyISAM不支持事务、也不支持外键,其优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。对比MyISAM,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

MySQL数据库中最重要的两个存储引擎InnoDB与MyISAM。

特别重要的区别:

  1. 事务性
    InnoDB支持事务,MyISAM不支持。
  2. 外键约束
    InnoDB支持外键,MyISAM不支持。
  3. 加锁与并发
    InnoDB支持行锁和表锁,MyISAM只支持表锁。关于MySQL的锁,可参考MySQL InnoDB的锁
  4. 索引
    InnoDB支持聚簇索引,数据和索引聚集在一起。MyISAM不支持聚簇索引,数据和索引是分开存储的。

其他的区别:

  1. COUNT()函数
    关于MyISAM有这样一个误解,就是执行COUNT()函数会非常快。这个论断需要有一个前提条件,没有任何WHERE条件的COUNT(*)才非常快。因为MyISAM用一个变量保存了表的行数,当没有WHERE条件时可以直接读取这个值即可。而如果存在WHERE条件时,MyISAM没有任何优势,比起InnoDB可能慢,也可能快。
  2. 主键
    因为InnoDB支持聚簇索引,必须要有主键,详情可参考MySQL的聚簇索引和覆盖索引,MyISAM可以没有主键。
  3. 压缩
    可以使用myisampack对MyISAM表进行压缩,压缩后的表不可以被修改(除非先解压、再修改、再压缩)。压缩表可以极大地减少磁盘空间占用,因此可以减少磁盘IO,从而提升查询性能。压缩表也支持索引,但索引是只读的。压缩时表中记录是独立的,所以读取单行时不需要解压整个表。
  4. 存储
  • InnoDB引擎存储:
    • 共享表空间存储,表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件。
    • 多表空间存储,表结构仍然保存在.frm文件中,但是每个表的数据和索引单独保存在.ibd中。
  • MyISAM引擎:
    • .frm文件,存储表定义
    • .MYD文件,MYData,存储数据
    • .MYI文件,MYIndex,存储索引

相关文章

网友评论

      本文标题:MySQL的InnoDB与MyISAM的区别

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