MySQL - MySQL存储引擎

本文详细介绍了MySQL中的InnoDB、MyISAM和MEMORY三种存储引擎,包括各自的特点、优缺点、适用场景和操作技巧,帮助读者根据业务需求选择合适的存储引擎。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概况

数据库存储引擎,数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,可以获得不同的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。

MySQL5.6开始支持多种存储引擎:InnoDB、MyISAM、Memory、Merge、CSV等,我重点记录InnDB、MyISAM和Memory三种存储引擎。

查看MySQL数据库支持的引擎类型使用:SHOW ENGINES;,格式化显示使用SHOW ENGINES \G;



一、InnoDB存储引擎

InnoDB是事务型数据库的首选引擎,InnoDB给MySQL的表提供了事物、回滚、崩溃修复能力和多版本并发控制的事物安全。InnoDB是MySQL上第一个提供外键约束的表引擎,InnoDB对事物处理的能力,是其他引擎无法比拟的,MySQL5.5.5之后作为默认存储引擎,下面介绍InnoDB存储引擎的特点及缺点:

  1. InnoDB存储引擎中支持自动增长列AUTO_INCREMENT。自动增长值不能为空,且值必须唯一,且必须为主键。可插入前面没有出现的过的值。
  2. InnoDB存储引擎中支持支持外键(FOREIGN KEY),外键所在的表为子表,外键所依赖的表为父表。父表中被子表外键关联的字段必须为主键。
  3. InnoDB存储引擎中,创建表的表结构存储在.frm文件中,数据和索引存储.idb文件中(可能有多个idb文件)。

InnoDB存储引擎的优势在于提供了良好的事物管理、崩溃修复能力和并发控制。缺点是其读写效率稍差,占用的数据空间较大

使用场景:更新密集的表、事物(比如银行)、自动灾难恢复。



二、MyISAM存储引擎

MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MySQL5.5.5之前默认引擎是MyISAM。

MyISAM存储引擎的表存储成3个文件.frm存储表的结构,.MYD存储数据(My Data),.MYI存储索引(My Index)。


1.MyISAM的存储格式

1.静态型

所有表列都是静态,此表会自动定义为静态。字段是固定长度的,存储非常迅速、容易缓存,出现故障容易恢复;占用空间通常比动态表多。

2.动态型

有表列都是动态态,此表会自动定义为动态。占用的空间相对较少,但是频繁的更新删除记录会产生碎片,需要定期执行optimize table或myisamchk -r命令来改善性能,而且出现故障的时候恢复比较困难

3.压缩型

针对只读表,就使用压缩型表。使用myisampack工具创建,占用非常小的磁盘空间。因为每个记录是被单独压缩的,所以只有非常小的访问开支。


2.MyISAM存储引擎的优缺点

MyISAM存储引擎的优点在于占用空间小,处理速度快(插入、查询快)。缺点是不支持事物的完整性和并发性,也不支持外键。



三、MEMORY存储引擎

MEMORY存储引擎是MySQL中比较特殊的存储引擎,它将表中的数据存储在内存中,下面从MEMORY存储引擎从文件格式、索引类型、存储周期和优缺点进行讲解。

1.MEMORY存储引擎的文件格式

每个表对于一个磁盘文件,文件名与表名相同,该文件只存储表结构,类型为.frm。数据文件存储在内存中,这样有利于对数据的快速处理。


2.MEMORY存储引擎的索引类型

MEMORY存储引擎默认使用哈希索引(HASH),速度比B型数(BTREE)索引快,可以在创建索引时指定。


3.MEMORY存储引擎的存储周期

MEMORY存储引擎的很少用到,因为MEMORY表的所有数据都是存储在内存上的,重启或关机表中的数据就会消失,MEMORY表的生命周期很短。


4.MEMORY存储引擎的优缺点

优点

  1. 访问数据的速度快,数据都是存储在内存中。
  2. MEMORY在MySQL4.1.0之后支持自增序列AUTO_INCREMENT
  3. 不同进程间的数据是互通的。

缺点

  1. 大小受到限制,max_rows在创建表时指定,max_heap_table_size大小默认16MB,可按需扩大。
  2. 当mysqld守护进程崩溃时,所有的MEMORY数据都会丢失。
  3. 不支持VARCHAR、BLOB和TEXT数据类型,因为这种表类型是按固定长度记录格式存储


四、如何选择存储引擎

根据业务场景,存储引擎特性选择合适的存储引擎:

  1. InnoDB存储引擎:用于事物处理应用程序,有ACID事务支持、支持外键。支持崩溃修复能力和并发控制。可实现事物的提交(Commit)和回滚(Rollback)。如果对事物的完整性要求高、要求实现并发控制,或需要频繁的更新、删除操作数据库,就可使用InnoDB存储引擎。

    InnoDB存储引擎的使用最为广泛

  2. MyISAM存储引擎:管理非事物表,提供高速存储、检索和全文搜索。它插入数据快,空间和内存使用比较低。当表主要用于插入新记录和读出记录,选择MyISAM存储引擎能实现处理的高效率。应用的完整性、并发性要求低,也可使用MyISAM。

  3. MEMORY存储引擎:MEMORY存储引擎提供“内存中”表,MEMORY所有的数据都在内存中,数据处理速度快,安全性低。MEMORY不能建太大的表。如果需要很快的读写速度,对数据的安全性要求低,就可以选择MEMORY存储引擎。



五、高手甜点

1.查看系统默认存储引擎

处理SHOW ENGINES显示系统全部存储引擎外,还可使用下面语句直接查看系统默认存储引擎:

SHOW VARIABLES LIKE 'default_storage_engine';

2.修改默认存储引擎

打开MySQL配置文件my.ini(可能不是此文件名,但是一定是此文件后缀.ini),找到default-storage-engine=INNODB,将INNODB换成实际需要的引擎就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值