MySQL的常用存储引擎详解

简介:myisam存储引擎介绍,innodb存储引擎介绍,MySQL存储引擎对比

什么是存储引擎?

所谓存储引擎就是一种存储数据的方式,就好比磁盘里的文件系统。不同的存储引擎,存储数据的方式不同,实现的功能点也不同。

查看当前数据库所支持的所有存储引擎

show engines;

结果如下所示:

查看某个表的存储引擎信息

show table status from 数据库名 where name='表名' \G;

最后面的 \G 不写也可以,它的作用是格式化,方便大家查看。结果如下所示

MyISAM存储引擎

在MySQL5.5之前的版本默认使用MyISAM引擎。使用该存储引擎的表会在磁盘上存储三个文件:

  1. frm文件:存储表的定义数据
  2. MYD文件:存放表具体记录的数据
  3. MYI文件:存储索引但仅保存记录所在页的指针,索引的结构是B+树结构

MyISAM支持的数据类型也有三种:

  • 静态固定长度表

存储速度非常快,容易发生缓存,而且表损坏后容易修复。缺点是占空间。这也是默认的存储格式。

  • 动态可变长表

优点是节省空间,但是一旦出错恢复起来比较麻烦。

  • 压缩表

在实际工作中如果数据文件发生错误时候,可以使用 check table 工具来检查,还可以使用 repair table 工具来恢复

MyISAM存储引擎最大的特点就是不支持事务,也因为不支持事务它的存储速度更快。利用这一点,我们在做MySQL主从分布式数据库时,在从库上选择使用MyISAM引擎来存储数据,以达到更好的效果。

InnoDB存储引擎

使用InnoDB存储引擎的表会在磁盘上存储两个文件

  1. frm文件:存储表的定义信息
  2. IBD文件:存储数据和索引。如果是分区表的话,每个分区对应单独的IBD文件。

对于InnoDB来说,最大的特点在于支持事务。但是这是以损耗效率换取来的。

存储引擎的特点对比

不同的存储引擎都有各自的特点,以适应不同的需求。接下来我们针对MyISAM和InnoDB两种种存储引擎做出对比

功能 MyISAM InnoDB
存储限制 256T 64T
事务 不支持 支持
全文索引 Yes No
B树索引 Yes Yes
集群索引 No Yes
数据索引 No Yes
数据压缩 Yes No
外键 No Yes

我们再来看看这两个引擎的锁级别

MyISAM:只支持表级锁,用户在操作myisam表时,select、update、delete、insert语句都会给表自动加锁。如果加锁以后的表满足insert并发的情况,可以在表的尾部插入新的数据。

InnoDB:支持行级锁,是InnoDB的最大特点。行锁大幅度提高了多用户并发操作的性能。但是InnoDB的行锁,只是在WHERE的索引上有效,where条件没有走索引的都会锁全表。

有遗漏或者不对的可以在我的公众号留言哦

编程经验共享公众号二维码

编程经验共享公众号二维码
更多内容关注公众号
Copyright © 2021 编程经验共享 赣ICP备2021010401号-1