MySQL存储引擎

MySQL存储引擎的种类

        数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。简而言之,存储引擎是 MySQL 的存储和检索数据表的方法。现在许多数据库管理系统都支持多种不同的存储引擎MySQL的核心就是存储引擎。MySQL 提供了处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。

        MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 等。可以使用SHOW ENGINES;

        Support 列的值表示某种引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认的存储引擎。

存储引擎描述
ARCHIVE用于数据存档的引擎,数据被插入后就不能在修改了,且不支持索引。
CSV在存储数据时,会以逗号作为数据项之间的分隔符。
BLACKHOLE会丢弃写操作,该操作会返回空内容。
FEDERATED将数据存储在远程数据库中,用来访问远程表的存储引擎。
InnoDB具备外键支持功能的事务处理引擎
MEMORY置于内存的表
MERGE用来管理由多个 MyISAM 表构成的表集合
MyISAM主要的非事务处理存储引擎
NDBMySQL 集群专用存储引擎

        后面会对其中的几种(主要是 InnoDB 和 MyISAM )进行讲解。有几种存储引擎的名字还有同义词,例如,MRG_MyISAM 和 NDBCLUSTER 分别是 MERGE 和 NDB 的同义词。存储引擎 MEMORY 和 InnoDB 在早期分别称为 HEAP 和 Innobase。虽然后面两个名字仍能被识别,但是已经被废弃了。

MySQL查看和修改默认存储引擎

        如果需要操作默认存储引擎,首先需要查看默认存储引擎。

#查看默认的存储引擎
mysql> SHOW VARIABLES LIKE 'default_storage_engine%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set, 1 warning (0.11 sec)

#默认存储引擎修改为 MyISAM
mysql> SET default_storage_engine=MyISAM;
Query OK, 0 rows affected (0.00 sec)

mysql>  SHOW VARIABLES LIKE 'default_storage_engine%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | MyISAM |
+------------------------+--------+
1 row in set, 1 warning (0.00 sec)

        注意:当再次重启客户端时,默认存储引擎仍然是 InnoDB。

MySQL存储引擎的选择

        我们需要根据不同的应用场景去选择合适的存储引擎。

MySQL存储引擎特性汇总和对比
特性MyISAMInnoDBMEMORY
存储限制支持
事务安全不支持支持不支持
锁机制表锁行锁表锁
B树索引支持支持支持
哈希索引不支持不支持支持
全文索引支持不支持不支持
集群索引不支持支持不支持
数据缓存支持支持
索引缓存支持支持支持
数据可压缩支持不支持不支持
空间使用N/A
内存使用中等
批量插入速度
支持外键不支持支持不支持

         在 MySQL 存储引擎中,事务是指一系列操作,这些操作要么全部成功执行,要么全部失败回滚,保证了数据的一致性和完整性。外键是指一个或多个列,这些列必须与另一个表中的列相匹配,这种匹配关系称为引用完整性约束。使用外键可以将两个表关联起来,避免数据冗余和不一致性,同时还可以保证数据的完整性。

MyISAM

        在 MySQL 5.1 版本及之前的版本,MyISAM 是默认的存储引擎。
 
        MyISAM是一种非事务型的存储引擎。它最初是为了提供更快的读写速度而设计的,因此常常被用来存储那些读取频繁,写入不太频繁、数据完整性要求不高的应用数据。与事务型存储引擎不同,MyISAM存储引擎不支持事务处理,也不支持外键和行锁等高级特性。如果出现异常,MyISAM不能回滚整个事务,只能回滚到最后提交点。

        虽然MyISAM不能像事务型存储引擎那样保证数据的完整性和可靠性,但是它有一些优点。例如,它支持全文搜索、表级锁定和支持压缩等特性。同时,MyISAM存储引擎的表文件大小比较小,可以提高磁盘空间的利用率,并且能够快速恢复数据,因为它在每个操作之后都会立即写入磁盘而不是借助缓存。

        在高并发的情况下,MyISAM存储引擎会出现表锁定的问题,影响读写性能,在面对高并发数据写入的场景下,不适合使用MyISAM存储引擎。因此,对于需要大量的数据查询和读取,同时不需要考虑事务的应用程序,可以考虑使用MyISAM存储引擎。

InnoDB

        MySQL 5.5 版本之后默认的事务型引擎修改为 InnoDB。
 
        InnoDB 存储引擎是MySQL的一种事务型存储引擎,即支持具有提交、回滚和崩溃恢复能力的事务安装,所以比 MyISAM 存储引擎占用更多的磁盘空间。是MySQL默认的存储引擎,如果需要使用事务支持和更高的并发性能,建议使用InnoDB存储引擎。但是在一些资源受限的环境中,可以考虑使用MyISAM存储引擎。

        如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么 InnoDB 存储引擎是比较合适的选择。

        InnoDB支持行级锁定,这意味着当多个用户同时进行操作时,只会锁定他们所访问的行,而不是整个数据表,从而提高了并发操作的效率。另外,InnoDB存储引擎还支持外键,可以确保数据的参照完整性。

        InnoDB存储引擎具有良好的崩溃恢复特性,可以快速地进行数据库恢复。InnoDB还支持自适应哈希索引和自适应读取优化等功能,可以显著提高查询的性能。

MEMORY

        MEMORY 存储引擎将所有数据保存在 RAM 中,它可以将数据保存在内存中,而不是保存在硬盘上,所以该存储引擎的数据访问速度快,但是安全上没有保障。
 
        但是由于数据表的数据都保存在内存中,因此如果服务器发生了崩溃或者断电等异常情况,数据就会丢失。另外,MEMORY存储引擎的数据最大空间受限于系统的内存空间,因此无法处理大量的数据。在内存空间紧张的情况下,MEMORY存储引擎也容易引起系统崩溃。此外,由于数据存储在内存中,因此会造成系统内存的大量占用,降低系统的稳定性和可靠性。
 
        MEMORY存储引擎支持表级锁定和哈希索引等特性,并且数据表的所有数据都保存在内存中,不需要像磁盘存储一样进行IO操作,这使得MEMORY存储引擎在处理少量数据的情况下非常快。

MySQL修改数据表的存储引擎

        MySQL 中修改数据表的存储引擎的语法格式如下:

ALTER TABLE <表名> ENGINE=<存储引擎名>;

#先查看数据表的存储引擎
show create table student;

#修改存储引擎为 MyISAM 类型
ALTER TABLE student ENGINE=MyISAM;

        注意:以上这种方法适用于修改单个表的存储引擎,如果希望修改默认的存储引擎,就需要修改 my.cnf 配置文件。在 my.cnf 配置文件的 [mysqld] 后面加入以下语句:

default-storage-engine=存储引擎名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值