MySQL 支持的存储引擎

·  阅读 35

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、自定义存储引擎

dev.mysql.com/doc/interna…


本文内容来自于公众号 “简迅云笔记”,请转载时勿删除当前​标注。

分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改