MySQL(五)、存储引擎

目录

介绍

Memory

介绍 

特性

场景

MyISAM

介绍 

存储格式

特性

场景

InnoDB

介绍

特性

场景

总结


MySQL系列:

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

MySQL(二)、事务

MySQL(三)、锁

MySQL(四)、日志


介绍

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

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

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

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引擎:

特 性 MyISAM Memory InnoDB
存储限制 256TB RAM 64TB
事务安全 不支持 不支持 支持
全文索引 支持 不支持 不支持
B树索引 支持 支持 支持
哈希索引 不支持 支持 不支持
数据缓存 不支持 不支持 支持
外键 不支持 不支持 支持
数据写入速度

 

文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树数据库组成存储引擎31842 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年7月15日
下一篇 2020年7月15日

相关推荐