阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL常见存储引擎详解

159次阅读
没有评论

共计 3029 个字符,预计需要花费 8 分钟才能阅读完成。

通过执行 show engines 命令查看 MySQL 中支持哪些存储引擎

MySQL 常见存储引擎详解

MySQL 存储引擎属性对比

MySQL 常见存储引擎详解

设置表的存储引擎的方法 

在 my.cnf 配置文件中设置 default-storage-engine 参数表示设置默认存储引擎  
在 MySQL 的连接上设置当前连接的默认存储引擎

mysql> set default_storage_engine=innodb;

创建表的时候通过 engine= 语句指定该表的存储引擎

CREATE TABLE t1 (i INT) ENGINE = INNODB;

在表创建之后通过 alter 语句修改表的存储引擎

ALTER TABLE t1 ENGINE = csv;

Innodb 存储引擎

存储引擎 InnoDB 是目前 MySQL 版本默认的存储引擎,也是 MySQL 推荐使用的存储引擎,是集高可靠性和高性能于一身的存储引擎。

在 MySQL5.7 版本中,除非在配置文件中显视指定 default storage engine 或者创建表时显视使用 engine= 语句指定其它的存储引擎,否则默认都是 InnoDB

InnoDB 存储引擎的优势在于:

DML 语句支持事务功能,保证 ACID 特性  
行级锁的使用保证了高并发的属性  
InnoDB 对有主键的表会依据主键优化查询性能,也称聚簇索引,将所有数据存储在聚簇索引上以减少对主键查询的 IO 消耗 
为保证数据的一致性,InnoDB 还支持外键属性,确保有外键约束的表之间不会有不一致的数据  
当服务器硬件或者软件故障导致 MySQL 重启后,InnoDB 会自动识别已经在故障之前提交的数据,并回退所有故障时未提交的数据,最大限度的保护数据不会丢失(crash recovery)

InnoDB 存储引擎的属性

MySQL 常见存储引擎详解

Myisam 存储引擎

MyISAM 存储引擎是 MySQL 老版本的默认存储引擎,由于其表级锁的特性,所以限制了其在读写操作时的性能,常用在只读表上或者读操作占绝大多数的表上,比如一些 web 应用和数据仓库相关表

每个 MyISAM 表都会在磁盘上生成三个文件,表名和文件名相同但后缀不同, .frm文件存储表的结构信息, .MYD文件存储表的数据信息, .MYI文件存储表的索引信息

MySQL 常见存储引擎详解

Memory 存储引擎

Memory 存储引擎将所有数据存储在内存中以便加快对某些不重要数据的访问速度

此存储引擎的使用范围已经变小,因为 InnoDB 已经提供了数据缓存区以便对将经常访问的数据缓存在内存中

当 MySQL 重启时,Memory 表中的数据会丢失,但表结构还在 
Memory 只适用在只读表或者读操作占绝大多数的情况,因为对表的写操作也会导致表锁大大限制了并发性

Memory 表创建之后,在磁盘文件会生成一个相同表名的文件,后缀为.frm,仅存储表结构而不存储表数据

CSV 存储引擎

Csv 存储引擎下的表对应了文本文件,其中的数据用逗号隔开,csv 表可用来以 csv 格式导入和导出表

当创建一个 csv 表时,磁盘会生成三个以表名为名字的文件,.frm 存储表的结构信息而.CSV 文件用来存储以逗号隔开的数据信息,.CSM 文件用来存储表的元数据,包括表的状态和有多少行数据信息

mysql> create table t(id int not null, name char(10) not null) engine=csv;
Query OK, 0 rows affected (0.00 sec)
 
mysql> insert into t values (1,’one’),(2,’two’);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
 
mysql> select * from t;
+—-+——+
| id | name |
+—-+——+
|  1 | one  |
|  2 | two  |
+—-+——+
2 rows in set (0.00 sec)
 
mysql> system ls /usr/local/mysql/data/test
db.opt  t.CSM  t.CSV  t.frm
mysql> system cat /usr/local/mysql/data/test/t.CSV
1,”one”
2,”two”

ARCHIVE 存储引擎

Archive 存储引擎表用来存储大量未加索引的历史归档数据

archive 表会在磁盘创建两个文件,.frm 文件用来存储表结构信息,.ARZ 文件用来存储历史归档数据 
Archive 表支持 insert, replace 和 select 语句,但不支持 delete 和 update 语句

Archive 表支持行级锁 
Archive 支持 auto_incrment 列,且其列上可以包含一个索引,但在其他字段上不能创建索引

Archive 不支持对 auto_incrment 列插入一个小于当前最大值的数据 
Archive 存储引擎会用 zlib 来压缩数据

MySQL 常见存储引擎详解

Blackhole 存储引擎

Merge 存储引擎可以将一批字段相同,索引相同且顺序相同的 MyISAM 表在逻辑上看做是同一个

Merge 表在磁盘上创建两个文件,.frm 文件保存表的结构信息,.MRG 文件包含所有被视作同一个表的 MyISAM 表

Merge 表支持 select,delete,update,insert 语句执行

创建 merge 表时需要执行 union 子句,用来将指定的 MyISAM 结合起来,insert_method 选项用来指定插入语句是将数据插入到第一个表 FIRST 还是最后一个表 LAST 中,或者不指定或 NO 表不允许插入

create table t1 (a int not null auto_increment primary key, message char(20)) engine=myisam;
create table t2(a int not null auto_increment primary key , message char(20)) engine=myisam;
insert into t1 (message) values (‘testing’),(‘table’),(‘t1’);
insert into t2 (message) values (‘testing’),(‘table’),(‘t2’);
create table total(a int not null auto_increment, message char(20),index(a)) engine=merge union=(t1,t2) insert_method=last;
select * from total;
mysql> select * from total;
+—+———+
| a | message |
+—+———+
| 1 | testing |
| 2 | table  |
| 3 | t1      |
| 1 | testing |
| 2 | table  |
| 3 | t2      |
+—+———+
6 rows in set (0.00 sec)

Federated 存储引擎

Federated 存储引擎提供了从一个 MySQL 实例连接其它实例上数据的能力  
Federated 存储引擎默认是 disable 状态,如果要开启,则需要在启动 MySQL 时使 
用—federated 选项

Example 存储引擎

Example 存储引擎只存在于 MySQL 源码中,只针对开发者,对实际的数据库使用者没有太大的意义 
Example 表只保留表结构,本身不保存数据

NDB 存储引擎

NDB 存储引擎专用在 MySQL Cluster 软件中,是 MySQL 自己推出的提高可用性和可靠性的集群软件

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计3029字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中