MySQL存储引擎

MySQL存储引擎的种类

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

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

MySQL存储引擎_第1张图片

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

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

        后面会对其中的几种(主要是 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存储引擎特性汇总和对比
特性 MyISAM InnoDB MEMORY
存储限制 支持
事务安全 不支持 支持 不支持
锁机制 表锁 行锁 表锁
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=存储引擎名称

你可能感兴趣的:(数据分析师,MySQL,mysql,数据库,数据分析)