MySQL之SQL优化篇(三):浅谈MySQL存储引擎
简单谈及在SQL优化过程中涉及存储引擎的内容。
上一节:MySQL之SQL优化篇(二):SQL性能分析与诊断
前言
关于存储引擎有太多的细节需要关注,本文只是简单记录自己的理解(混个眼熟),随着学习的深入,将会不断更新。
MyISAM
在MySQL 5.1及之前的版本,MyISAM是默认的存储引擎,系统表使用的存储引擎就是MyISAM。对于MyISAM,对其印象最深刻的就是全文索引、不支持事务和行级锁、索引和数据的存放形式、崩溃后无法安全恢复等。
InnoDB
对于InnoDB,映像最深刻的就是支持事务(默认REPEATABLE READ)和行级锁、数据恢复比MyISAM更加稳定、数据存放在表空间中、聚簇索引、覆盖查询、5.6之后开始支持全文索引,5.7通过插件能支持中文全文索引。在大多数情况下,使用MySQL官方指定的默认存储引擎InnoDB是最安全、最稳妥的做法。在MySQL 8.0及以上,系统数据库默认的存储引擎为InnoDB:
Blackhole
Blackhole引擎没有实现任何的存储机制,它会丢弃所有插入的数据,不做任何保存,但是,它会记录二进制日志。熟悉MySQL复制的小伙伴应该都知道,MySQL备库是通过获取主库的二进制日志来实现数据的复制。备库数量少的时候影响可能不大,然而,当备库过多,主库在业务压力之下还要承担来自备库的复制请求,这时候就显得不堪重负了。此时可以使用一个采用Blackhole存储引擎的备库来承担主库的复制压力,由于Blackhole不写数据只保留日志的特性,使得它的开销会比其他引擎低,专心做日志复制的工作。
CSV
CSV引擎就如同其名字一样,是关于.csv格式文件的存储引擎。它可以把csv文件作为MySQL的表进行处理,是一种非常有用的数据交换机制。
Memory
Memory引擎表所有数据都存储在内存中,不需要磁盘IO,速度是非常快的(比MyISAM快)。如果在查询过程中需要使用临时表保存中间结果,临时表很有可能是Memory表,如果数据太大超过内存限制或者是含有BLOB、TEXT等字段,则会使用MyISAM表。因此,尽量不要使用BLOB和TEXT等“大类型”。
更多存储引擎信息
参考官方文档链接