1、MySQL 的其他存储引擎
MySQL 8.0 的默认存储引擎是 InnoDB,可以通过设置 SET default_storage_engine=“存储引擎名称”;
修改会话级的默认存储引擎。在配置 my.cnf 中的 [mysqld] 添加 default-storage-engine=“存储引擎名称”
设置永久性的默认存储引擎。
通过 show variables like '%storage_engine%';
查看 default_storage_engine 默认引擎。SHOW ENGINES
查看数据库支持的存储引擎。
可以通过 CREATE TABLE t3 (i INT) ENGINE = MEMORY;
指定表的存储引擎,如果没有设置就是默认的存储引擎。通过 ALTER TABLE “表名” ENGINE = INNODB;
修改已创建的存储引擎。
1.2、InnoDB
InnoDB 是一个可靠性高的数据库引擎。它具有以下优势:
- 如果服务器因为硬件或者软件故障而导致的意外退出,在重启服务器,无需做任何操作,InnoDB 会自动帮你完成宕机之前正在提交的更改,撤销正在进行且尚未完成提交的更改。
- InnoDB 维护自动的缓冲池,访问数据时将 “表和索引数据” 都存储在缓存当中。
- 如果磁盘或者内存中的数据损坏,校验机制会在你使用数据之前向你发出警报。
- DML 操作会被 InnoDB 优化,它会将更改的数据放置到缓存中,以一定的频率去将数据写入到磁盘当中,减少磁盘 IO。这个操作也叫刷盘操作。
- 可以通过查询 INFORMATION_SCHEMA 的表去监控存储引擎的内部工作。
- 可以通过查询 performance_schema 的表去监控存储引擎性能相关的细节。
- 你甚至可以在一条语句中和其他存储引擎的数据混着使用。比如 InnoDB 可以和 MEMORY 表关联查询。
- InnoDB 支持事务、XA 和回滚保存点。
InnoDB 因为数据和索引都存放在一个文件当中,所以通过 show VARIABLES like '%datadir%'
拿到数据位置,进入相关的数据库目录会发现只有一个 .ibd 文件。
特性 | 是否支持 |
---|---|
B-tree 索引 | 支持 |
备份/恢复 | 支持 |
集群 | 不支持 |
聚簇索引 | 支持 |
压缩数据 | 支持 |
数据缓存 | 支持 |
数据加密 | 支持 |
外键 | 支持 |
全文索引 | 支持 |
地理空间数据 | 支持 |
地理空间索引 | 支持 |
哈希索引 | 不支持 |
索引缓存 | 支持 |
锁粒度 | 行锁 |
MVCC(多版本并发控制) | 支持 |
复制 | 支持 |
内存限制 | 64TB |
T-Tree索引 | 不支持 |
事务 | 支持 |
更新数据字典的统计信息 | 支持 |
1.3、MyISAM
特性 | 是否支持 |
---|---|
B-tree 索引 | 支持 |
备份/恢复 | 支持 |
集群 | 不支持 |
聚簇索引 | 不支持 |
压缩数据 | 支持 |
数据缓存 | 不支持 |
数据加密 | 支持 |
外键 | 不支持 |
全文索引 | 支持 |
地理空间数据 | 支持 |
地理空间索引 | 支持 |
哈希索引 | 不支持 |
索引缓存 | 支持 |
锁粒度 | 表锁 |
MVCC(多版本并发控制) | 不支持 |
复制 | 支持 |
内存限制 | 256TB |
T-Tree索引 | 不支持 |
事务 | 不支持 |
更新数据字典的统计信息 | 支持 |
MyISAM 因为索引和数据是分开存放的,所以在相应的位置中有两个文件,.MYD(MYData)数据文件,.MYI (MYIndex)索引文件。
可以通过 mysqlcheck 或者 myisamchk 去检查和修复 MyISAM 表。 myisampack 也可以用来压缩表的空间。
1.4、MEMORY
特性
- 当 MySQL 服务器重启或者停止时,memory 表中的数据会丢失。
- 尽管 memory 表的数据是在内存中进行处理的,但它不一定比满负载下的 InnoDB 快,特别是 memory 中执行更新的时候最小粒度是表锁,这个可能会影响其他会话的写入操作。
- memory 表不会在磁盘中创建任何文件,它的表定义在 MySQL 的数据字典中,所以在服务器重启的时候,其数据会被清空,但是表还是存在的。
- memory 在删除行时不会真正的释放空间,它会将删除的行放置在一个链表当中。只有当你删除整个表时才会真正的去释放空间。
- 表的最大限制受
max_heap_table_size
控制,默认是 16M。可以修改每个表的大小限制,但是在服务器重启之后,这个大小限制会被还原。 - memory 的 hash 索引键重复程度会影响更新和删除操作,其影响程度和重复度成正比,可以使用 BTREE 来解决这个问题。
特性 | 是否支持 |
---|---|
B-tree 索引 | 支持 |
备份/恢复 | 支持 |
集群 | 不支持 |
聚簇索引 | 不支持 |
压缩数据 | 不支持 |
数据缓存 | 不适用 |
数据加密 | 支持 |
外键 | 不支持 |
全文索引 | 不支持 |
地理空间数据 | 不支持 |
地理空间索引 | 不支持 |
哈希索引 | 支持 |
索引缓存 | 不适用 |
锁粒度 | 表锁 |
MVCC(多版本并发控制) | 不支持 |
复制 | 受限 |
内存限制 | RAM |
T-Tree索引 | 不支持 |
事务 | 不支持 |
更新数据字典的统计信息 | 支持 |
1.5、CSV
这个存储引擎存储的数据和我们平时用的 csv 表格用的数据时一致的,都是以
1,2,3
2,32,2
这种格式存储。
在创建 CSV 表时,服务器会创建一个以 .CSV 文件结尾的纯文本数据文件,同时还会创建一个 .CSM 的元文件,这里记录了表的状态和行数。
可以通过 CHECK TABLE "表名"
和 REPAIR TABLE "表名"
分别去检查和修复表。修复表会将有效数据保留(从文件开头到第一个问题行视为有效数据),异常数据删除。
1.6 ARCHIVE
特性
- ARCHIVE 支持 INSERT, REPLACE, 和 SELECT,但是不支持 DELETE 或者 UPDATE。
- ARCHIVE 如果存在 AUTO_INCREMENT 的列,插入的时候就不支持插入小于当前最大的 AUTO_INCREMENT 列的数据。
- ARCHIVE 在插入行时被压缩,该存储引擎使用 zlib 无损压缩。
- 单条数据插入时只是将数据放置到缓冲区,视情况刷新缓冲区。查询会发生强制刷新。
- 批量插入只在完成后可见。除非在插入的时候还发生其他插入。这时候批量插入的数据是部分可见的。
特性 | 是否支持 |
---|---|
B-tree 索引 | 不支持 |
备份/恢复 | 支持 |
集群 | 不支持 |
聚簇索引 | 不支持 |
压缩数据 | 支持 |
数据缓存 | 不支持 |
数据加密 | 支持 |
外键 | 不支持 |
全文索引 | 不支持 |
地理空间数据 | 支持 |
地理空间索引 | 不支持 |
哈希索引 | 不支持 |
索引缓存 | 不支持 |
锁粒度 | 行锁 |
MVCC(多版本并发控制) | 不支持 |
复制 | 支持 |
内存限制 | 没有 |
T-Tree索引 | 不支持 |
事务 | 不支持 |
更新数据字典的统计信息 | 支持 |
1.7、BLACKHOLE
接收数据但是不存储数据。
1.8、MERGE
1.9、FEDERATED
可以支持访问远程 MySQL 数据库中的数据。
1.10、EXAMPLE
不做任何事的存储引擎,只是做实例引导作用。
1.11、自定义存储引擎
https://dev.mysql.com/doc/internals/en/custom-engine.html
本文内容来自于公众号 “简迅云笔记”,请转载时勿删除当前标注。