MySQL存储引擎

介绍

一张表包含:表的结构数据索引

存储引擎直接影响上面内容存储方式

MyISAM

MyISAM 不支持事务、也不支持外键,索引采用非聚集索引,其优势是访问的速度快,对事务完整性没有要求,以 SELECT、INSERT 为主的应用基本上都可以使用这个存储引擎来创建表。MyISAM的表在磁盘上存储成 3 个文件,其文件名都和表名相同,扩展名分别是:

.frm(存储表定义)

.MYD(MYData,存储数据)

.MYI (MYIndex,存储索引)

InnoDB

InnoDB 存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全,支持自动增长列,外键等功能,索引采用聚集索引,索引和数据存储在同一个文件,所以InnoDB的表在磁盘上有两个文件,其文件名都和表名相同,扩展名分别是:

.frm(存储表的定义)

.ibd(存储数据和索引

由于InnoDB的数据和索引是存在同一个文件中的索引树放的就是数据,也就是用InnoDB即便没有主键也会自动添加主键列

MEMORY

MEMORY 存储引擎使用存在内存中的内容来创建表。每个MEMORY 表实际只对应一个磁盘文件,格式是.frm(表结构定义)。MEMORY 类型的表访问非常快,因为它的数据是放在内存中的,并且默认使用 HASH 索引(不适合做范围查询),但是一旦服务关闭,表中的数据就会丢失掉。

各存储引擎的区别

MySQL存储引擎_第1张图片

  • 机制:表示数据库在并发请求访问的时候,多个事务在操作时,并发操作的粒度

  • B-树索引和哈希索引:主要是加速SQL的查询速度

  • 事务:多个SQL语句,保证它们共同执行的原子操作,要么成功,要么失败,不能只成功一部分,失败需要回滚事务。

  • 索引缓存和数据缓存:和MySQL Server的查询缓存相关,在没有对数据和索引做修改之前,重复查询可以不用进行磁盘I/O(数据库的性能提升,目的是为了减少磁盘I/O操作来提升数据库访问效率),读取上一次内存中查询的缓存就可以了。

    可以看到第二次查询比第一次查询快了0.4s用到了数据缓存(InnoDB):

MySQL存储引擎_第2张图片

MySQL存储引擎_第3张图片

你可能感兴趣的:(MySQL,mysql,数据库)