MySql的存储引擎

本文详细介绍了MySQL的三种主要存储引擎:MyISAM、InnoDB和Memory。MyISAM适合读取密集型且对事务处理要求不高的场景,支持全文搜索;InnoDB是事务安全的,支持行级锁和外键,适用于高并发的事务处理;Memory引擎将数据存储在内存中,适合快速查询但数据不持久化的场景。在选择存储引擎时,需根据应用的需求如事务处理、并发性能和数据持久性等因素进行决策。

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

前言

先上个图:
在这里插入图片描述

一、MyISAM

1.特点

(1) 既不支持事务 也不支持外键

(2)具有独立的索引文件,所以查询的性能比较高。

(3)采用非聚簇索引,MyISAM的存储文件有三个,后缀名分别是
.frm(存储表结构,每个存储引擎都有),
MYD(数据文件),
MYI(索引文件)
数据文件和索引文件可以防止在不同的目录下,平均分布io,获得更快的速度。

(4)支持全文检索,支持数据压缩(myisampack -b -f testmysam.MYI)
(5)支持表锁,不支持行锁。

2.存储格式

(1)静态表

默认的存储格式,固定长度
优点:存储快,容易缓存,出现故障容易恢复。
缺点:占用的空间比动态表多。

(2)动态表

变长
优点:占用的空间较小;
缺点:频繁的更新和删除记录会产生碎片。

(3)压缩表

由myisampack工具创建,占用非常小的磁盘空间,
因为每个记录都被单独压缩。

3.应用场景

(1)非事务型应用(报表系统、日志系统)
(2)空间类应用(GIS,MyISAM是有空间函数、坐标等)
(3)以select 和 insert为主的应用

二、InnoDB

1.概述

InnoDB提供了提交,回滚,崩溃恢复能力的事务安全保障,同时提供了更小的锁粒度和更强的并发能力,拥有自己独立的缓存和日志。对比存储引擎,innodb会占用更多的磁盘空间存储索引,但是大多数情况下,它是更好的选择。

2.特点

(1)支持行锁

(2)外键约束

只有innodb支持外键,也就是说父表发生改变,子表会根据外键的限制条件,来确定是否发生改变。
外键需要注意的细节很多,一旦使用不当,会对性能造成很大影响。所以需要慎重使用外键。

(3)主键和索引

innodb采用聚簇索引,Innodb的存储文件有两个,后缀名分别是.frm、.ibd(数据文件加索引)。
聚簇索引被成为主索引,并且也是innodb表的主键,innodb表每行数据都保存在主索引的叶子节点上,所有的innodb表必须包含主键,如果创建表时候,没有显示指定主键,那么innodb引擎就会自动创建一个长度为6个字节的long类型隐藏字段指定主键。

(4)存储方式

1.使用共享表空间存储:这种方式创建的表的表结构保存在.frm文件中,数据和索引存在innodb_ data home_ dir 和innodb data file path 定义的表空间中,可以是多个文件。

2.使用多表空间存储:这种方式创建的表的表结构仍然保存在.frm文件中,但是每个表的数据和索引单独保存在.ibd中。如果是一个分区表,则每个分区对应单独的.ibd文件,文件名是“表名+分区名”,可以在创建分区的时候指定每个分区的数据文件的位置,以此将表的IO均匀分布在多个磁盘上。

**使用共享表空间时,随着数据的不断增长,表空间的管理维护会变得越来越困难,所以一般都建议使用多 表空间。**要使用多表空间的存储方式,需设置参数innodb file per table ,在MySQL 5.7中,此参数默认设置为ON,即新建的表默认都是按照多表空间的方式创建。如果修改此参数为OFF,则新创建的表都会改为共享表空间存储,但已有的多表空间的表仍然保存原来的访问方式。

3.应用场景

(1)需要支持事务的业务(例如转账,付款)
(2)数据读写和更新都比较频繁的场景

三、Memory

(1)具有文件存储引擎的特点,数据是保存在内存中的,也被称为HEAP存储引擎,Mysql重启数据全部丢失。

(2)支持hash索引和B+树索引

(3)所有字段都是固定长度varchar(10) = char(10)

(4)不支持BloB和Text等大字段。

(5)使用的是表级锁

四、如何选择合适的存储引擎

MyISAM: MySQL 5.5之前版本默认的存储引擎。 如果应用是以读操作和插入操作为主,只有极少的更新和删除操作,并且对事务的完整性没有要求、没有并发写操作,那么选择这个存储引擎是适合的。 OLTP环境一般建议不要再使用MyISAM。

InnoDB: MySQL 5.5之后版本的默认存储引擎,用于事务处理应用程序,支持外键。对于大多数的应用系统,InnoDB都是合适的选择。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性。数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么应该优先选择InoDB存储引擎。InnoDB 存储引擎除了有效地降低由于删除和更新导致的锁定,还可以确保事务的完整提交(Commit)和回滚( Rllback ).

MEMORY:将所有数据保存在RAM中,在需要快速定位记录和其他类似数据的环境下,可提供极快的访问速度。MEMORY的缺陷是对表的大小有限制,太大的表无法缓存在内存中,其次是要确保表的数据可以恢复,数据库异常终止后表中的数据是可以恢复的。通常用于更新不太频繁的小表,所以用于快速得到访问结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值