MySQL存储引擎InnoDB与MyISAM区别

MySQL存储引擎

一、简介

MySQL存储引擎是数据库将数据组织、存储到文件中所采取的机制方式。

存储引擎发展至今,为了满足不同场景的存储需求,追求更好的性能,出现了诸如 InnoDB(MySQL5.5以后默认)、MyISAM(MySQL5.5以前默认)、Memory、CSV等存储引擎,下面就以上存储引擎的 特点、区别、使用场景 做个简要说明:

可以通过以下命令:

show engines;  # 查看存储引擎

通过该命令,可以查看MySQL对各执行引擎的支持情况、说明、是否支持事务、XA(常见的是指由 X/Open 组织提出的分布式事务处理的规范.)、保存点(savepoint)

二、InnoDB

事务型数据库的首选引擎,是为处理巨大数据量时的最大性能设计。

InnoDB以二进制文件存储在磁盘上,只有一个 .ibd文件

该图InnoDB存储引擎采用的是B+树索引结构,叶子节点上存储了数据记录和索引字段(聚簇索引),并且各数据记录之间会按索引字段通过指针由小到大排序(本图中未画出),关于MySQL索引及优化会在其它文章中总结。

三、MySIAM

以二进制的形式,存储到磁盘文件上。采用MySIAM磁盘存储文件形式:.MYD 与 .MYI 两个文件。

采用MyISAM存储,存储文件形式: 注:MySQL 8.0 以后

文件 作用 .MYD文件 MyISAM的数据文件 –存放数据记录 .MYI文件 MyISAM的索引文件 –存放索引 .sdi文件 (MySQL 8.0 以后) .FRM文件(MySQL 8.0 以前) 表结构文件,可以用来帮助恢复数据

先从索引文件.MYI中查找索引,然后在.MYD中查找数据记录 。改索引树(非聚簇索引)中非叶子节点存储索引,非叶节点(索引字段、数据记录地址)

四、特点、区别、适用场景

SHOW ENGINES; # 查看支持的存储引擎、包括默认引擎
SET DEFAULT_STORAGE_ENGINE=engine_name; # 设置默认存储引擎
ALTER TABLE table_name ENGINE=engine_name; # 修改表存储引擎
区别 InnoDB MySIAM 数据存储方式 数据和索引存储在同一个 .ibd文件 中。 数据和索引是分开存储的,分别存储在.MYD 与 .MYI文件中。 事务支持 支持ACID事务特性 NO 锁的支持 InnoDB可以根据实际的业务需要, 支持 行级锁、表级锁、间隙锁等等 只支持表锁 外键 YES NO 读的效率(read) < 写的效率(write) > 自增属性(Auto_increment) YES NO 删除 一行一行删除 重新建表 适用场景 用到事务及ACID特性、行级锁等、insert/updatae等操作时 —大量的查询操作 —适合小应用、跨平台

| | |

经验分享 程序员 微信小程序 职场和发展