AI智能
改变未来

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内部维护了一个计算器,可以直接调取。
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » MySql采用的存储引擎MyISAM和InnoDB