MySQL的存储引擎目前总共有9种ARCHIVE
、BLACKHOLE
、MRG_MYISAM
、FEDERATED
、MyISAM
、PERFORMANCE_SCHEMA、InnoDB、MEMORY
、CSV
,但常用的有两种,一种是InnoDB,一种是MyISAM。可以在MySQL中使用命令行show engines
查看MySQL支持的所有存储引擎, 若想要比较好的显示结果可以使用show engines \G
命令查看MySQL的数据存储引擎,结果会显示存储引擎名称、特性以及支持的功能。
以下是通过show engines \G
命令查看的存储引擎结果:
*************************** 1. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 5. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 8. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
重点来关注常用的两种:InnoDB、MyISAM。
InnoDB
InnoDB作为MySQL的存储结构,其存储文件为
$ InnoDB=\begin{cases} *_. frm & 表结构定义文件 \ \ ibdata1 & 表空间存放元数据、Buffer、UNDO日志\end{cases} $
随着创建的数据库越来越多或数据库中创建的数据越来越多,ibdata1文件会越来越大,如何对InnoDB进行瘦身也是经常讨论的问题。
MyISAM
MyISAM的存储文件个数相比较InnoDB而言多了一个,其文件结构为
$MyISAM=\begin{cases} _. frm & 表结构定义文件 \ \ .MYD & 数据文件 \ \ *.MYI & 索引文件\end{cases}$
可以发现MyISAM的存储与InnoDB的不同,其将索引作为单独的一个文件,而InnoDB则是索引和数据都存放在表空间中,这也导致了两者内部的索引原理不同。
InnoDB与MyISAM特性比较
InnoDB与MyISAM虽然都是常用的数据存储引擎,在特性上两者有很大不同,下面从以下方面将两者进行对比:
特性 | InnoDB | MyISAM |
---|---|---|
事务 | 支持 | 不支持 |
数据锁定 | 支持 | 不支持 |
全文索引 | 不支持 | 支持 |
外键约束 | 支持 | 不支持 |
表空间大小 | 较大 | 较小 |