数据库中都会有存储引擎的概念,MySQL的特点就是其存储引擎支持插件式的,存储引擎用来处理数据库相关的CRUD操作。
MySQL中常见的存储引擎有如下几种:
- InnoDB
- MyISAM
- Memory
- NDB Cluster
- Federated
- CSV
- Archive
InnoDB最开始作为第三方存储引擎存在,其诞生的时间比MySQL本身还要早,它被包括在MySQL数据库所有的二进制发行版本中,并从MySQL5.5开始取代MyISAM的位置成为默认的表存储引擎。另外,其他的存储引擎官方已经不再维护和开发,所以我们应该要尽可能使用InnoDB
可以通过show engines
查看MySQL支持的存储引擎
各存储引擎特性
先简述一下两个概念,OLTP和OLAP。
OLTP和OLAP的区别
InnoDB
- 面向OLTP的应用,支持事务;
- 支持行锁定、外键;
- 不仅可以使用文件系统,还能使用裸设备;
- 实现了SQL标准的4种隔离级别。
MyISAM
- 不支持事务,面向OLAP应用,如数据仓库;
- 并发时锁表;
- 索引容易损坏、数据容易丢失;
- 数据文件可以直接拷贝到另一台服务器使用。
MyISAM存储引擎创建的表由.MYD和.MYI文件组成。.MYD用来存放数据 ,.MYI存放索引。
表a和b的存储文件a表的创建语句:
create table a(a int) engine=myisam;
。b表的创建语句:create table b(a int);
其默认的存储引擎为InnoDB。a.frm和b.frm为表的结构文件,可以通过mysqlfrm将frm文件转成create table语句。
mysqlfrm --diagnostic /var/lib/mysql/test/a.frm
mysqlfrm工具在MySQL Utilities工具包中,使用前需要先安装Utilities
.MYD是MyISAM存储引擎的数据存储文件,.MYI是MyISAM存储引擎的索引存储文件,.ibd是InnoDB存储引擎的数据和索引存储文件。
NDB
NDB存储引擎也叫NDB Cluster存储引擎,主要用于MySQL Cluster分布式集群环境。
Memory
- 全内存存储,会话失效后数据丢失;
- 支持哈希索引。
CSV
- 数据通过csv文件存储;
- 要求每个列都是NOT NULL属性。
Federated
Federated有点类似于Oracle的dblink,主要用于远程存取其他MySQL服务器上的数据。
各大存储引擎特性对比参考
《MySQL技术内幕:InnoDB存储引擎》
网友评论