当前位置:   article > 正文

MySql采用的存储引擎MyISAM和InnoDB

MySql采用的存储引擎MyISAM和InnoDB

MySql体系结构

在这里插入图片描述

MySql插拔式的存储引擎

在这里插入图片描述

  • 插拔式引擎式Mysql中非常优秀设计,它可以动态的卸载加载存储引擎,通过一种插件化的方式进行加载,在mysql当中有非常多的存储引擎比如:MyISAM,InnoDB,Cluster等等存储引擎。
  • 在上面图片中Memory旁边有个索引Index。index索引的落地并非是MySql来实现的。是通过不同的存储引擎来实现的索引机制。
  • MyISAM是MySql5.5以前默认的存储引擎,InnoDB是5.5以后的默认版本存储引擎。存储引擎是用来修饰表的,一张表有且只能有一种存储引擎来修饰它,一个数据库有很多表,每个表都可以允许使用不同的存储引擎组成,但是不推荐这也使用。然而每张表必须要有一个存储引擎存储,在我们创建表的时候它会采用默认存储引擎。

MyISAM引擎落地
在这里插入图片描述

  • 如果一个表同时有3个你上面说的文件,则存储引擎是myisam,其中可以简单理解成这样:
  1. frm–表定义,是描述表结构的文件。
  2. MYD–"D"数据信息文件,是表的数据文件。
  3. MYI–"I"索引信息文件,是表数据文件中任何索引的数据树。
  • 根据上图显示,假设我们有一个User表,User表是根据MyISAM引擎修饰的,它会有两个文件MYI和MYD,MYI表示索引文件,在User这张表当中所有的index索引都存储在这个文件当中,MYD当中存储的是我们的数据,然后每条数据当中都会存储我们的磁盘指针。
  • 假设我们根据id索引1来查找,它会基于MYI当中的B+树去查询找,当找到我们末尾节点上的数据,该数据对应的是指针,当我们拿到指针后可以快速的去MYD上找到对应的行数据返回给我们的请求中。MyISAM当中支持创建多个MYI索引文件,会根据你创建多个索引文件生成多个B+树。

Myisam特点:

  1. 较快的数据插入和读取性能
  2. 较小的磁盘占用【相较于Innodb】
  3. 支持表级别的锁,不支持事务
  4. 数据文件与索引文件分开存储【MYD和MYI】
  5. Myisam的统计count方法可以通过额外的常量进行返回

InnoDB引擎
在这里插入图片描述

  • Innodb是没有MYD文件,Innodb是采用聚集索引,innodb当中有且只有一个主键索引,其他的都是非聚集索引,聚集索引在B+树末尾的子节点上存储的是它的行记录(表当中的每一行的数据)。比如id为1,在1xx当中存储的就是(1,zhangsan等等)它的索引和数据组织了在一起,以主键的索引组织在一起,这就叫做聚集索引。
  • Innodb本质上是不能没有主键的,假设你没有设置主键它默认采用roId来当主键。所以它是不可能没有主键索引。

InnoDB特点:

  1. 支持事务
  2. 行级锁
  3. 聚集索引
  4. 数据行内容与索引结构在一个文件当中【IBD】
  5. 外键支持,保证数据的完整性

MySQL中的myisam与Innodb的区别:

  • Innodb支持事务,而MyISAM不支持事务;
  • Innodb支持行级锁,而MyISAM支持表级锁;
  • Innodb支持MVCC,而MyISAM不支持;
  • Innodb支持外键,而MyISAM不支持;
  • Innodb不支持全文索引,而MyISAM支持;
  • select count(*) myisam更快,因为myisam内部维护了一个计算器,可以直接调取。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/595470
推荐阅读
相关标签
  

闽ICP备14008679号