面试官:你说对 MySQL 事务很熟?那我问你 10 个问题( 三 )


InnoDB通过一些机制和工具支持真正的热备份,MySQL的其他存储引擎不支持热备份,要获取一致性视图需要停止对所有表的写入,而在读写混合场景中,停止写入可能也意味着停止读取 。
MyISAM存储引擎的特点和应用场景?
MyISAM是MySQL 5.1及之前的版本的默认的存储引擎 。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不「支持事务和行级锁」,对于只读数据,或者表比较小、可以容忍修复操作,依然可以使用它 。
特性
MyISAM「不支持行级锁而是对整张表加锁」 。读取时会对需要读到的所有表加共享锁,写入时则对表加排它锁 。但在表有读取操作的同时,也可以往表中插入新的记录,这被称为并发插入 。
MyISAM表可以手工或者自动执行检查和修复操作 。但是和事务恢复以及崩溃恢复不同,可能导致一些「数据丢失」,而且修复操作是非常慢的 。
对于MyISAM表,即使是BLOB和TEXT等长字段,也可以基于其前500个字符创建索引,MyISAM也支持「全文索引」,这是一种基于分词创建的索引,可以支持复杂的查询 。
如果指定了DELAY_KEY_WRITE选项,在每次修改执行完成时,不会立即将修改的索引数据写入磁盘,而是会写到内存中的键缓冲区,只有在清理键缓冲区或者关闭表的时候才会将对应的索引块写入磁盘 。这种方式可以极大的提升写入性能,但是在数据库或者主机崩溃时会造成「索引损坏」,需要执行修复操作 。
InnoDB与MyISAM对比
说了这么多估计看一眼也没记住,给你一张表,简单罗列两种引擎的主要区别,如下图 。

面试官:你说对 MySQL 事务很熟?那我问你 10 个问题

文章插图
引擎对比
其他存储引擎
MySQL还支持其他一些存储引擎,比如memory引擎、NDB集群引擎、CSV引擎,由于这些引擎没有上述InnoDB 和MyISAM 常用,这里不作介绍,感兴趣可以去翻MySQL文档了解 。这里同样给出官方链接:https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html
面试官:你说对 MySQL 事务很熟?那我问你 10 个问题

文章插图
引擎列表
再说两句
这一篇是MySQL基础篇,我力求用通俗易懂和图表结合的形式给大家梳理这块知识,越是基础和底层的知识越容易被考察掌握程度,以上知识点都可能成为面试中的一个考察点,相信看完对MySQL事务和存储引擎应该有一个比较完整的理解 。
最后,感谢各位的阅读,文章的目的是分享对知识的理解,若文中出现明显纰漏也欢迎指出,我们一起在探讨中学习 。




推荐阅读