Mysql存储引擎简介

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…

你可能感兴趣的:(mysql,运维,mysql,数据库)