MySQL常用存储引擎对比

存储引擎概述

存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。

MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力。在MySQL中将这些不同的技术及配套的相关功能称为存储引擎。

 

存储引擎对比

特点 MyISAM InnoDB MEMORY MERGE NDB
存储限制 256TB 64TB RAM -
事务安全 - 支持 - - -
锁机制 表锁 行锁 表锁 表锁 行锁
B树索引 支持 支持 支持 支持 支持
哈希索引 - - 支持 - 支持
全文索引 支持 - - - -
集群索引 - 支持 - - -
数据缓存 - 支持 支持 - 支持
索引缓存 支持 支持 支持 支持 支持
数据可压缩 支持 - - - -
空间可用 N/A
内存使用
批量插入速度
支持外键 - 支持 - - -

MyISAM存储引擎

  • 数据存储方式简单,使用 B+Tree 进行索引
  • 使用三个文件定义一个表:.MYI .MYD .frm
  • 少碎片、支持大文件、能够进行索引压缩
  • 二进制层次的文件可以移植
  • 访问速度飞快,是所有MySQL文件引擎中速度最快的
  • Table level lock,性能稍差,更适合读取多的操作
  • 表数据容量有限,一般建议单表数据量介于 50w-200w
  • 增删查改以后要使用 myisamchk 检查优化表
  • 支持三种不同的存储结构:静态型、动态型、压缩型

InnoDB存储引擎

  • 使用 Table Space 的方式来进行数据存储 (ibdata1, ib_logfile0)
  • 支持事务、外键约束等数据库特性
  • Rows level lock, 读写性能都非常优秀
  • 能够承载大数据量的存储和访问
  • 拥有自己独立的缓冲池,能够缓存数据和索引
  • 在关闭自动提交的情况下,与MyISAM引擎速度差异不大(甚至更快)

MEMORY存储引擎

  • 每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度
  • 可以在一个表中有非唯一键值
  • 使用一个固定的记录长度格式
  • 不支持BLOB或TEXT列
  • 支持AUTO_INCREMENT列和对可包含NULL值的列的索引
  • 在所由客户端之间共享(就像其他任何非TEMPORARY表)

MERGE存储引擎

  • 是一组MyISAM表的组合,这些MyISAM表必须结构完全相同
  • 表本身并没有数据,对表的操作实际上是对内部的MyISAM表进行
  • 使用两个文件:.frm 存储表定义、.MRG 包含组合表的信息

 

存储引擎选择

  • MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常适合的。MyISAM是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。
  • InnoDB:用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多更新、删除操作,那么InnoDB存储引擎应该是比较合适的选择。InnoDB存储引擎除了有效低降低由于删除和更新导致的锁定,还可以确保事务的完整提交(Commit)和回滚(Rollback),对于类似计费系统或者财务系统等对数据准确性要求比较高的系统,InnoDB都是合适的选择。
  • MEMORY:将所有数据保存在RAM中,在需要快速定位记录和其他类似数据的环境下,可提供极快的访问。MEMORY的缺陷是对表的大小有限制,太大的表无法缓存在内存中,其次是要确保表的数据可以恢复 ,数据库异常终止后表中的数据是可以恢复的。MEMORY表通常用于更新不太频繁的小表,用以快速得到访问结果。
  • MERGE:用于将一系列等同的MyISAM表以逻辑方式组合在一起,并作为一个对象引用它们。MERGE表的优点在于可以突破对单个MyISAM表大小的限制,并且通过将不同的表分布在多个磁盘上,可以有效地改善MERGE表的访问效率。这对于诸如数据仓储等VLDB环境十分适合。

你可能感兴趣的:(MySQL)