MySQL-各存储引擎间的比较


作者:刘仁鹏
参考资料:《MySQL技术内幕 InnoDB存储引擎》


1.常用存储引擎介绍

1. InnoDB

  • 支持事务
  • 主要面向应用:OLTP(在线事务处理)
  • 行锁设计
  • 支持外键
  • 支持非锁定读
  • 使用多版本并发控制( MVCC)获得高并发性
  • 实现了SQL标准的4种隔离级别,默认隔离级别为可重复读
  • 使用next-key locking机制避免幻读
  • 提供了插入缓冲、二次写、自适应哈希索引、预读等高性能、高可用的功能
  • 采用聚集的方式存储数据(表的存储按主键顺序存放)

2.MyISAM

  • 不支持事务
  • 主要面向应用:OLAP(在线分析处理)
  • 缓冲池只缓冲索引文件,而不缓冲数据文件(数据文件的缓存交由操作系统本身完成)

3.NDB

  • 集群存储引擎
  • 其结构是share nothing(即sharding)的集群架构
  • 高可用,高性能
  • 优点:索引数据全部放在内存中,因此主键查找的速度极快,并且可通过添加NDB数据存储节点线性地提高数据库性能
  • 缺点:NDB存储引擎的连接操作(join)是在MySQL数据层完成的,而不是存储引擎层,这意味着,复杂的连接操作需要巨大的网络开销,因此查询速度很慢

4.Memory

  • 将表中的数据存放在内存中,如果数据库重启或崩溃,表中的数据将全部消失
  • 适用于:作为存储临时数据的临时表;数据仓库中的维度表
  • 默认使用哈希索引,而不是B+树索引
  • 只支持表锁,并发性能较差
  • 不支持TEXT和BLOB列类型
  • 存储变长字段是按照定长字段的方式进行的,因此会浪费内存
  • 如果中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有TEXT或BLOB列类型字段,则MySQL数据库会把其转换到MyISAM存储引擎表而存放到磁盘中,而MyISAM不缓存数据文件,因此这时产生的临时表的性能对查询会有损失

5.Archive

  • 适用于:存储归档数据,如日志信息
  • 只支持INSERT和SELECT操作
  • 支持索引
  • 使用zlib算法将数据行进行压缩后存储,压缩比一般可达1:10
  • 使用行锁来实现高并发的插入操作,但其本身不是事务安全的存储引擎

6.Federated

  • Federated存储引擎表并不存放数据,它只是指向一台远程MySQL数据库服务器上的表

7.Maria

  • MySQL创始人开发
  • 设计目标主要是用来取代原有的MyISAM存储引擎,从而成为MySQL的默认存储引擎
  • 特点:支持缓存数据和索引文件;行锁设计;支持MVCC;支持事务和非事务安全的选项;更好的BLOB字符类型的处理性能

2.各存储引擎之间的比较

你可能感兴趣的:(MySQL-各存储引擎间的比较)