微信搜索公众号:《菜鸟风神记》,定期分享一线大厂常用的干货。一、常用的MySQL存储引擎及其特点1、InnoDB存储引擎从MySQL5.5开始,MySQL默认内置的存储引擎已经是InnoDB。其主要特点是:(1)更好的容灾;(2)支持事务。默认的事务隔离级别是可重复性,这是通过MVCC(ConcurrentVersionControl)实现的。(3)使用的锁粒度为行级锁,可以支持更高的并发;(4)支持外键;(5)配合一些热备份工具,支持在线热备份;(6)InnoDB中有缓冲管理,通过缓冲池,缓存所有的索引和数据,以加快查询速度;(7)对于InnoDB类型的表,数据的物理组织形式是簇表。所有数据都按主键组织。数据和索引放在一起,位于编号为B+的叶子节点上;2、MyISAM存储引擎是MySQL5.5版本之前默认的存储引擎。这种存储引擎并发性差,不支持事务,所以使用场景比较少。主要特点是:(1)不支持交易;(2)不支持外键,如果强行添加外键,不会提示错误,但外键不起作用;(3)数据的查询缓存只会缓存索引,不会像InnoDB那样缓存数据,而是使用操作系统本身的缓存;(4)默认锁粒度是表级锁,所以并发性很差,加锁速度快,锁冲突少,不易死锁;(5)支持全文索引(MySQL5.6以后,InnoDB存储引擎也支持全文索引),但是MySQL的全文索引基本用不到。对于全文索引,目前还有其他成熟的解决方案,如:ElasticSearch、Solr、Sphinx等。(6)如果数据库所在主机宕机,MyISAM数据文件容易损坏且难以恢复;3、MEMORY存储引擎将数据存储在内存中,类似于市面上的Redis和memcached。为了提高数据访问速度,主要特点:(1)支持的数据类型有限,例如:不支持TEXT和BLOB类型,对于string类型的数据,只支持定长行,VARCHAR将是自动存储为CHAR类型;(2)Supported锁粒度为表级锁。因此,当访问量比较大时,表级锁会成为MEMORY存储引擎的瓶颈;(3)由于数据保存在内存中,重启服务器后所有数据都会丢失;(4)查询时,如果使用临时表,临时表中有BLOB和TEXT类型的字段,那么这个临时表会被转换成MyISAM类型的表,性能会急剧下降;4、ARCHIVE存储引擎ARCHIVE存储引擎适用场景有限,由于支持压缩,所以主要用于日志、流水等数据的归档。主要特点:(1)支持Zlib压缩,数据插入表前先压缩;(2)只支持SELECT和INSERT操作,保存在中的数据只能查询,不能修改和删除;(3)只支持自增键上的索引,不支持其他索引;5、CSV存储引擎数据传输试用,主要特点:(1)其数据格式为.csv格式的文本可以直接编辑保存;(2)导入导出更方便,可以直接将表格中的数据导出为csv,试试用Excel办公软件打开;二、InnoDB与MyISAM的比较1、由于锁粒度的限制不同,InnoDB比MyISAM支持更高的并发;2、InnoDB是行级锁,MyISAM是表级锁,所以InnoDB比MyISAM更容易死锁,锁冲突的概率更大。开销也比较高,因为每一行都需要加锁;3、在备份和容灾方面,InnoDB支持在线热备,有非常成熟的在线热备方案;4、在查询性能上,MyISAM比InnoDB的查询效率更高,因为InnoDB在查询过程中需要维护数据缓存,查询过程首先定位到行所在的数据块,然后定位行到从数据块中搜索;而MyISAM可以直接定位到数据所在的内存地址,就可以直接找到数据;5.SELECTCOUNT(*)语句,如果行数在千万以上,MyISAM可以很快查出来,但是InnoDB查询很慢,因为MyISAM单独存储行数,而InnoDB需要朱星统计行数;所以如果使用InnoDB,需要查询行数,需要对行数进行特殊处理,比如:离线查询和缓存;6、MyISAM的表结构文件包括:.frm(表结构定义),.MYI(索引),.MYD(数据);InnoDB表数据文件有:.ibd和.frm(表结构定义);三、如何选择合适的存储引擎1、使用场景是否需要事务支持;2、是否需要支持高并发,InnoDB的并发比MyISAM高很多;3、是否需要支持外键;4、是否需要支持在线热备份;5、数据的高效缓冲,InnoDB既缓冲数据又缓冲索引,而MyISAM只缓冲索引;6.索引,不同存储引擎的索引不一样;注:文章为原创。如需转发,请注明出处。更多文章会在个人网站更新。欢迎查收。另外还提??供了一些优秀的IT视频资料,可以免费下载!如有需要,请查看https://www.592xuexi.com
