MySQL(五)、存储引擎

目录

介绍

Memory

介绍 

特性

场景

MyISAM

介绍 

存储格式

特性

场景

InnoDB

介绍

特性

场景

总结


MySQL系列:

MySQL(一)、InnoDB索引原理及优化

MySQL(二)、事务

MySQL(三)、锁

MySQL(四)、日志


介绍

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以开启特定的功能。MySQL的核心就是存储引擎,在前面的文章中我们介绍了聚簇索引,非聚簇索引,表级锁行级锁等内容,其实它们在不同的存储引擎上的表现是不一样的,本篇就来介绍MySQL中常用的存储引擎以及适用的场景对比。

MySQL5.1之前默认存储引擎是MyISAM,MySQL5.5之后默认存储引擎是InnoDB,这两个也是最常用的存储引擎。

使用下面的命令查看当前数据库支持的存储引擎: 

SHOW ENGINES;

Memory

介绍 

Memory是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。在数据结构B+树那篇文章中有提到B+树是由于磁盘存储介质的IO瓶颈而出现的,那么对于内存型的存储引擎,使用B+树的意义就不大了,因此默认情况下,Memory引擎使用hash索引(也可以改为B+树索引),速度比使用B+树索引更快。但同时因为memory表的数据是存储在内存中,当服务重启或关机时,数据就会丢失,因此memory引擎使用的很少,现在基本上需要内存操作的时候都使用Redis了。

Memory引擎建的表由表结构文件(.frm) 和内存中的数据组成,这样有利于数据的快速处理,提高整个表的效率。 

Memory存储引擎:https://dev.mysql.com/doc/refman/8.0/en/memory-storage-engine.html

特性

  1. MEMORY不支持BLOB或TEXT列;
  2. 对可包括NULL值的列的索引;
  3. 可以使用非唯一键;
  4. 使用固定的记录长度格式;
  5. 支持INSERT DELAYED;
  6. 支持AUTO_INCREMENT列;
  7. 当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE);
  8. 不支持事务;
  9. 不支持外键;
  10. 不支持行锁,只支持表锁;

场景

  • 临时内存表;
  • 内容变化不频繁;
  • 数据量不大;

MyISAM

介绍 

MyISAM基于ISAM存储引擎,并对其进行扩展,拥有较高的插入、查询速度,但不支持事务和外键

使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,文件类型:.FRM文件存储表定义,.MYD文件存储数据,.MYI文件存储索引。

MyISAM存储引擎:https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html

存储格式

支持3种不同的存储格式

静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)。在取数据的时候,默认会把字段后面的空格去掉,可能会忽略数据本身前后带的空格。

动态表:记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能。

压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支。

特性

  1. 支持大文件;
  2. 不支持事务;
  3. 不支持外键;
  4. 不支持行级锁,支持表级锁;
  5. BLOB和TEXT列可以被索引;
  6. 索引的列中允许有NULL值,这个值占每个键的0~1个字节;
  7. 每个MyISAM表最大索引数是64,每个索引最大的列数是16;
  8. 每个字符列可以有不同的字符集;
  9. 可以把数据文件和索引文件放在不同目录;

场景

  • 读多或者写多的单一业务场景、不适合读写频繁的场景,会因表级锁而造成阻塞;
  • 非事务场景;
  • 读写并发访问较低的业务;
  • 数据修改相对较少的业务;
  • 以读为主的业务;
  • 频繁的count(*)统计计算;

InnoDB

介绍

InnoDB存储引擎支持事务(ACID),支持行锁定和外键,是MySQL5.5之后默认的存储引擎,也是目前MySQL上使用最多的存储引擎。

InnoDB表由表结构文件(.frm),共享表空间文件(ibdata1),独占表空间文件(.ibd)以及日志文件(redo文件等)组成。

InnoDB存储引擎:https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html

特性

  1. 高并发:采用多版本并发控制(MVCC)来支持高并发;
  2. 支持事务ACID;
  3. 实现了四个标准的隔离级别;
  4. 支持行级锁;
  5. 支持外键;
  6. 聚簇索引;
  7. 支持热备份;

场景

  • 事务场景;
  • 频繁读写的业务;
  • 需要行级锁的场景;

总结

对比MyISAM、Memory、InnoDB引擎:

特 性MyISAMMemoryInnoDB
存储限制256TBRAM64TB
事务安全不支持不支持支持
全文索引支持不支持不支持
B树索引支持支持支持
哈希索引不支持支持不支持
数据缓存不支持不支持支持
外键不支持不支持支持
数据写入速度

 

希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王义凯_Rick

遇见即是缘,路过就给个评论吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值