Mysql存储引擎
MySQL 中有哪些常见的存储引擎
MySQL 支持多种存储引擎,常见的有 MyISAM、InnoDB、MEMORY 等。
存储引擎应该怎么选择?
大多数情况下,使用默认的 InnoDB 就可以了,InnoDB 可以提供事务、行级锁、外键、B+ 树索引等能力。
MyISAM 适合读多写少的场景
MEMORY 适合临时表,数据量不大的情况。因为数据都存放在内存,所以速度非常快。
InnoDB 和 MyISAM 主要有什么区别?
InnoDB 和 MyISAM 的最大区别在于事务支持和锁机制
InnoDB 支持事务、行级锁,适合大多数业务系统
而 MyISAM 不支持事务,用的是表锁,查询快但写入性能差,适合读多写少的场景
从存储结构上来说,MyISAM 用三种格式的文件来存储,.frm 文件存储表的定义;.MYD 存储数据;.MYI 存储索
InnoDB 用两种格式的文件来存储,.frm 文件存储表的定义;.ibd 存储数据和索引。
MyISAM 为非聚簇索引,索引和数据分开存储,索引保存的是数据文件的指针
InnoDB 为聚簇索引,索引和数据不分开
InnoDB 的 Buffer Pool 了解吗
Buffer Pool 是 InnoDB 存储引擎中的一个内存缓冲区,它会将经常使用的数据页、索引页加载进内存,读的时候先查询 Buffer Pool,如果命中就不用访问磁盘了。
如果没有命中,就从磁盘读取,并加载到 Buffer Pool,此时可能会触发页淘汰,将不常用的页移出 Buffer Pool
写操作时不会直接写入磁盘,而是先修改内存中的页,此时页被标记为脏页,后台线程会定期将脏页刷新到磁盘
Buffer Pool 可以显著减少磁盘的读写次数,从而提升 MySQL 的读写性能