MySQL存储引擎

2019-09-15  本文已影响0人  刘一一同学

1. MyISAM(非聚簇索引)

1.1 简介

MyISAM引擎基于ISAM(Indexed Sequential Access Method,有索引的顺序访问方法)存储引擎基础上进行改进而来,具有较高的插入速度、查询速度。

1.2 优点

1.3 缺点

若以MyISAM引擎创建数据库表Create table user (......),它实际是生成3个文件:

  • user.myi:索引文件。
  • user.myd:数据文件。
  • user.frm:数据结构类型。

当我们执行select * from user where id = 1;的时候,它的执行流程:

  • 查看该表的myi文件有没有以id为索引的索引树。
  • 根据这个id索引找到叶子节点的id值,从而得到它里面的数据地址。(叶子节点存的- 是索引和数据地址)
  • 根据数据地址去myd文件里面找到对应的数据返回出来。

2. InnoDB(聚簇索引)

2.1 简介

MySQL(5.5版之前)的默认数据库引擎是MyISAM。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。InnoDB(事务性数据库引擎),MySQL(5.5版之后)默认的存储引擎为InnoDB。大多数时候我们使用的都是 InnoDB 存储引擎,但是在读操作频繁的情况下适合使用MyISAM

若以InnoDB引擎创建数据库表Create table user (......),它实际是生成2个文件:

  • user.ibd,索引文件。
  • user.frm,数据结构类型。

InnoDB引擎创建表时,默认的是主键索引,所以不需要.myi索引文件。

3. MYISAM和InnoDB引擎区别

  • InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引。
  • InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
  • MyISAM索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。
  • InnoDB非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效。
上一篇 下一篇

猜你喜欢

热点阅读