所以在选择哪个引擎的时候要根据实际业务选择,比如某个业务只会插入一次数据,后面的都只有查询,那么我就建议使用MyISAM,如果需要支持事务那就用InnoDB。 由于我们平时使用多的还是InnoDB引擎,所以这里主要剖析下InnoDB的存储结构(MyISAM和InnoDB在存储结构上是类似的) 5.7和8.0有些许不一致,主要是系统表空间的一些内容会移动到单独的表空间中去 为了保证数据不丢失,我们的数据必须要落盘,但是如果每次增删改查都去操作磁盘,那效率太低了,所以mysql会在内存中抽象出一份数据结构和磁盘一一对应,这样我们每次的增删改查就会优先操作内存中的数据。 咱们插入的数据是存储在磁盘的,而平时我们通过Navicate或者shell查询出来的数据,展现形式为表格,并不代表我们的数据也是这样直接这样存储在磁盘上的,磁盘上的数据有自己的格式。 比如我们将数据存在在文件是这样存储的 将内存中数据刷新到磁盘并不是一条数据一条数据从内存刷新到磁盘的,为了效率,InnoDB将数据划分为若干个页,以页作为磁盘和内存之间交互的基本单位,InnoDB中页的⼤⼩⼀般为 16KB,和磁盘上默认的页大小一致。 也就是在⼀般情况下,⼀次少从磁盘中读取16KB的内容到内存中,⼀次少把内存中的16KB内容刷新到磁盘中。 而内存数据结构主要分为 Buffer Pool(缓冲池) 和 Log Buffer(日志缓冲),它们管理的都是页,而页中存储的是数据。 https://z.itpub.net/article/detail/3E097E5138AA4A892D4BA75704C34B07整体架构

从Mysql官网提供的体系结构图中可以看出来出来,整个mysql分为以下几部分
InnoDB引擎

user.id=1
user.name=think123
user.age=18
内存结构
原文