五. MySQL的存储引擎

1. 前言

插件式存储引擎是MySQL数据库最重要的特性之一,用户可以根据应用的需要选择如何存储和索引数据、是否需要使用事务等。MySQL默认支持多种存储引擎,以适用于不同领域的数据应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存储,用户甚至可以按照自己的需要定制和是用自己的存储引擎,以实现最大程度的可定制性。

MySQL 5.0支持的存储引擎包括:

  • MyISAM(默认:MySQL 5.5之前
  • InnoDB(提供事务安全表)(默认::MySQL 5.5之后
  • BDB(提供事务安全表)
  • MEMORY
  • MERGE
  • EXAMPLE
  • NDB Cluster
  • ARCHIVE
  • CSV
  • BLACKHOLE
  • FEDERATED
  • ……

2. 各种存储引擎的特性

特点MyISAMInnoDBMEMORYMERGENDB
存储限制64TB没有
事务安全支持
锁机制表锁行锁表锁表锁行锁
B 树索引支持支持支持支持支持
哈希索引支持支持
全文索引支持
集群索引支持
数据缓存支持支持支持
索引缓存支持支持支持支持支持
数据可压缩支持
空间使用N/A
内存使用中等
批量插入速度
支持外键支持

2.1 MyISAM

MyISAM是MySQL默认的存储引擎。MyISAM不支持事务、也不支持外键,其优势是访问的速度快,对事务完整性没有要求或者以 SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。
每个MyISAM在磁盘上存储成3个文件,其文件名都和表名相同,但扩展名分别是:

  • .frm(存储表定义);
  • .MYD(MYData,存储数据);
  • .MYI(MYIndex,存储索引);
    数据文件和索引文件可以放置在不同的目录,平均分布IO,获取更快的速度。

2.2 InnoDB

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。
其在使用过程中不同于使用其他存储引擎的表的特点如下:

  1. 自动增长列:自增长列必须是索引。如果是组合索引,也必须是组合索引的第一列。
  2. 外键约束
  3. 存储方式:存储表和索引有以下两种方式:
    • 使用共享表空间存储:这种方式创建的表的表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dirinnodb_data_file_path定义的表空间中,可以是多个文件。
    • 使用多表空间存储:这种方式创建的表的表结构仍然保存在.frm文件中,但是每个表的数据和索引单独保存在.ibd中。如果是个分区表,则每个分区对应单独的.ibd文件,文件名是表名 + 分区名,可以在创建分区的时候指定每个分区的数据文件的位置,以此来将表的IO均匀分布在多个磁盘上。

2.3 MEMORY

MEMORY存储引擎使用存在于内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件,格式是.frmMEMORY类型的表访问非常地快,因为它的数据都放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉

2.4 MERGE

MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,MERGE表本身并没有数据,对MERGE类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部MyISAM表进行的。

2.5 TokuDB

TokuDB是第三方存储引擎,是一个高性能、支持事务处理的MySQL和MariaDB的存储引擎,具有高扩展性、高压缩率、高效的写入性能,支持大多数在线DDL操作。
点击进入TokuDB下载地址

TokuDB主要有以下特性

  • 使用Fractal树索引保证高效的插入性能
  • 优秀的压缩特性,比InnoDB高近10倍
  • Hot Schema Changes特性支持在线创建索引和添加、删除属性列等DDL操作
  • 使用Bulk Loader达到快速加载大量数据
  • 提供了主从延迟消除技术
  • 支持ACID和MVCC
    TokuDB官网连接

TokuDB适用的场景

  • 日志数据,因为日志通常插入频繁且存储量大
  • 历史数据,通常不会再有写操作,可以利用TokuDB的高压缩特性进行存储
  • 在线DDL较频繁的场景,使用TokuDB可以大大增加系统的可用性
  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值