InnoDB存储引擎:
处理大量的短期事务,数据存储于表空间(table space)中,表空间,是innodb自己管理的黑盒,可以把它理解为,是一个建立在文件系统之上的文件系统,只有innodb引擎,才能正确识别他。
- 所有Innodb表中的数据和索引,放置于一个表空间中。这样的话备份恢复,就相当不方便。这个表空间文件,在datadir目录下,一般叫做“ibdata1、ibdata2”;
- 每个表,单独使用一个表空间,存储表中的数据和索引。innodb_file_per_table配置。他的数据文件(存储数据和索引):tbl_name.ibd,tbl_name.frm表格式定义。
- 基于MVCC来支持较高并发,支持所有的四个隔离级别,默认级别为REPEATABLE READ;间隙锁放置幻读。
- 使用聚集索引;
- 支持自适应hash索引;innodb引擎比较难,想要详细理解需要查看官网文档。
- 注意:MariaDB中使用的存储引擎并不是innodb,而是XtraDB(percona公司,提供mysql技术支持的公司),他是基于innodb引擎,做了社区改进,被开源的增强版。
- 概览:
- 数据存储:表空间
- 并发:MVCC,间隙锁
- 性能:预计操作,自适应hash,插入缓存区
- 备份:支持热备xtrabackup
- 锁粒度:行级锁
MyISAM存储引擎:
mysql较早的存储一你请,支持全文索引(FULLTEXT index)、压缩、空间函数,但不支持事务。表级锁。崩溃后无法安全恢复。适用于只读,或者写操作较少的场景。frm表格式定义,MYD数据文件,MYI索引文件。
- 特性:
- 加锁和并发:表级锁
- 修复:手工或自动修复、但可能丢失数据
- 索引:非聚集索引
- 延迟更新索引
- 压缩表
Aria存储引擎:
MyISAM存储引擎,加上了崩安全恢复功能。
其他存储引擎:
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.05 sec)
- csv:本质上是一种数据存储格式,将普通的csv字段,通过逗号分隔,作为mysql表使用。所以不支持索引。可以很方便的在数据库中导入导出。
- mgr_myisam:将多个MyISAM表合并为一个虚拟表。
- blackhole:类似于linux上的/dev/null。不真正存储任何数据。
- memory:所有数据保存于内存中,用于当作临时表使用。性能很好,但是无法持久化存储。支持hash索引;表级锁。可能会导致内存浪费。
- performance_schema:伪存储引擎,类似linux中的proc目录。用来输出mysql核心内部性能统计的虚表。如果mysql没起,该表为空。
- archive:通常用来实现数据归档,目前很少使用。仅支持select和insert操作。archive支持行级锁和专业那个缓存区。不支持事务。
- federated:该存储引擎会自动扮演成一个mysql客户端,从而连接至其他的mysql服务器上去,而后,对federated引擎的表,发起的所有操作,他都会自动偷梁换柱暗度成仓的发给另外一个服务器,并从这个服务器上取到数据后,发回给你。可以理解为访问其他mysql服务器的一个代理。
- 其他用户自开发的存储引擎。OQGraph、SphinxSE、TokuD…