存储引擎

1、定义

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。

2、查看支持的引擎

show engines;

3、InnoDB

MySQL5.5及以后版本默认引擎,目前开发中基本上通用引擎,甚至在58这些大公司的建表规范中已经明确提出必须且唯一使用的引擎。
优点如下:

  • 灾难恢复性好
  • 支持全部4种级别的事务,默认可重复读
  • 支持外键(现在基本不用了)
  • 使用行级锁
  • 数据组织形式为簇表,即主键索引和数据在一起
  • 基于聚簇索引建立,聚簇索引对主键查询有很高的性能
  • 实现了缓冲管理
  • 支持外键(现在基本不用了)
  • 支持热备份
  • 创建的表结构存储在.frm文件中
  • 数据不可压缩,体积大
  • 5.6以后支持全文索引

4、MyISAM

MySQL5.0/5.1的默认引擎
优点如下:

  • 支持全文索引
  • 每个表生成三个文件:.frm 表结构、.MYD 数据、.MYI 索引
  • 不支持事务
  • 表级锁,并发性差
  • 不能在表损坏后恢复数据
  • 只缓存索引,数据的缓存是利用操作系统缓冲区来实现的
  • 数据紧凑存储,可获得更小的索引和更快的全部扫描性能
  • 数据可压缩,体积小

5、MEMORY(HEAP)

数据保存在内存中,拥有极高的插入、更新和查询效率。但是不稳定,重启以后数据都会丢失。
优点如下:

  • 不支持事务,表级锁,并发写入的性能较低
  • 支持长度不变的数据类型,varchar可用,因为在MySQL内部当做长度固定不变的CHAR类型
  • 不支持BLOB或TEXT长度可变的数据类型
  • 每个表会生成一个.frm文件,该文件只存储表的结构
  • 支持HASH索引和B-Tree索引,默认使用HASH索引

5、存储引擎特性对比

特点 InnoDB Myisam Memory Archive BDB
存储限制 64TB 没有 没有 没有
事务安全 支持
锁机制 行锁 表锁 表锁 行锁 页锁
全文索引 5.6以后支持 支持
B树索引 支持 支持 支持 支持
哈希索引 支持 支持
集群索引 支持
数据缓存 支持 支持
索引缓存 支持 支持 支持
数据可压缩 支持 支持
空间使用 N/A 非常低
内存使用 中等
支持外键 支持
批量插入速度 非常高