MySQL引擎之常用引擎

一、MyISAM引擎

  • 在MySQL 5.1及以前的版本中是默认存储引擎
  • 存储表的特征
    1.格式文件——存储表的结构(.frm)
    2.数据文件——存储表的数据(.MVD)
    3.索引文件——存储表的索引(.MYI)
  • 特性
    a)可以转化为压缩、只读表来节省空间
    b)不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有要求或者以select,insert为主的应用基本上可以用这个引擎来创建表
    c)支持3种不同的存储格式,分别是:静态表;动态表;压缩表
    https://blog.csdn.net/qq_34417408/article/details/80957620
    d)对整张表加锁,而不是针对行
    e)可以手工或者自动执行检查和修复操作
    f)延迟更新索引(如果指定了DELAY-KEY-WRINF选项,在每次修改执行完成时,并不立即将检查索引数据写入磁盘,而是写到内存的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引写入磁盘中),提高了写入性能,但容易造成索引损坏。
    二、InnoDB引擎
    InnoDB存储引擎的默认事务型引擎
    特性:
    a) 每个InnoDB表在数据库目录中以.frm格式文件表示
    b)InnoDB表名空间tablespace被用来存储表的内容
    c) 提供一组用来记录事务性活动的日志文件
    d) 用commit(提交),savepoint及rollback(回滚)支持事务处理
    https://baike.baidu.com/item/数据库事务/9744607?fr=aladdin
    e) 提供全部ACID兼容
    https://baike.baidu.com/item/acid/10738?fr=aladdin
    f) 在MySQL服务器崩溃后自动修复
    g) 多版本(MVCC)和行级锁定
    https://baike.baidu.com/item/MVCC/6298019?fr=aladdin
    h) 支持外键及引用完整性,包括级联更新和删除
    三、Memory
    以前被称为Heap索引,因为数据存储在内存中,不需要进行磁盘I/O,且长度固定,所以该引擎非常快。
    特性:
    a)临时的(但不同于临时表),一旦服务关闭,表中的数据就会丢失掉。
    b) 每个表均为.frm格式文件
    c)数据库及索引在内存中(所以多用于查)
    d)表级锁机制,并发写入性能低(少用于写)
    e)字段属性不能包含TEXT或BLOB字段(太大了),每行长度固定
    https://www.cnblogs.com/printN/p/7463737.html
    四、Archive
    只支持insert 和 select操作
    特征
    a)缓存所有的写并利用zlib对插入的行进行压缩,所以比MyISAM磁盘I/O更少
    b)每次select都要执行全表扫描,所以更适合日志和数据采集
    c)支持行级锁和专用锁的缓冲区,可以实现高并发的插入
    五、如何选择合适的存储引擎
    1、MyISAM表最适合于大量的数据读而少量的数据更新的混合操作,MyISAM表的另一个试用情形压缩只读表
    2、InnoDB适用于查询中包含较多的数据更新操作行级锁机制和多版本的支持为数据读取和更新提供了良好的并发机制
    3、Memory适用于存储非永久需要的数据,或者能够从基于磁盘的表中重新生成的数据
    4、如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive
    MySQL引擎之常用引擎