【JAVA面试】MyISAM和InnoDB

文章对比了MyISAM和InnoDB存储引擎的区别,包括事务支持、锁定机制、索引类型等方面。MyISAM适合大量读取操作和批量插入,而InnoDB提供事务和行级锁定,更适合并发写入。在主从同步场景下,从库选择MyISAM可能带来数据一致性问题。
摘要由CSDN通过智能技术生成

提示:文章先作为初版,等后续时间充足后,补充更深的内容


MyISAM和InnoDB

一、区别

MyISAMInnoDB
不支持事务支持事务和ACID特性
采用表级锁定采用行级锁定(并发处理方面更好)
使用系统缓存来缓存索引和数据使用自己的缓存池(InnoDB Buffer Pool)来缓存数据和索引
不支持外键约束支持外键约束
支持全文搜索(Full-Text Search)功能需要通过插件或其他方式实现
存储总行数不存储总行数
非聚集索引聚集索引
(多插入不在乎排序使用MyISAM,主从同步从库也可以使用MyISAM引擎)

mysql的索引类型跟存储引擎是相关的

InnoDB存储引擎数据文件跟索引文件全部放在ibd文件
MyISAM的数据文件放在myd文件中,索引放在myi文件中。【其实区分聚簇索引和非聚簇索引非常简单,只要判断数据跟索引是否存储在一起就可以了

聚集索引和非聚集索引的关系:

聚集索引(Clustered Index):聚集索引是按照数据的物理顺序组织数据的索引,一张表只能有一个聚集索引在InnoDB存储引擎中,主键是默认的聚集索引,数据行按照主键的顺序存储在磁盘上。
非聚集索引(Non-Clustered Index):非聚集索引是独立于数据的物理顺序的索引,它存储了索引字段和对应的主键或行地址。在InnoDB存储引擎中,除了主键索引外,其他的索引都是非聚集索引。

innodb存储引擎在进行数据插入的时候,数据必须要跟索引放在一起,如果有主键就使用主键,没有主键就使用唯一键,没有唯一键就使用6字节的rowid【因此跟数据绑定在一起的就是聚簇索引】而为了避免数据冗余存储,其他的索引的叶子节点中存储的都是聚簇索引的key值,因此innodb中既有聚簇索引也有非聚簇索引,而myisam中只有非聚簇索引。

二、.xxx后缀

.FRM表结构相关数据
【聚簇】:
.IBD数据文件和索引文件
【非聚簇】:
.MYD数据文件DATA
.MYI索引文件INDEX

三、拓展

在某些情况下,使用MyISAM存储引擎可以提供一些性能优势,特别是在进行大量的批量插入操作时。因为MyISAM使用表级锁定,而不是行级锁定,因此在并发插入操作较多的情况下,MyISAM可以更高效地处理。

对于主从同步中的从库,如果从库只用于读操作,并且数据的完整性不是最高优先级,那么在某些情况下可以考虑使用MyISAM作为存储引擎。由于MyISAM没有事务支持,主从同步过程中的写操作会有一定的延迟,但如果读操作的性能是更重要的考虑因素,那么使用MyISAM可能是可行的选择

然而,需要注意以下几点:

MyISAM不支持事务和行级锁定,这可能导致在并发写入场景下出现较多的锁冲突和性能瓶颈
MyISAM对数据的完整性支持较弱,不提供外键约束和ACID特性,需要开发人员自行保证数据的一致性
在主从同步中,如果主库使用的是InnoDB作为存储引擎,从库最好也使用InnoDB,以确保数据的一致性和完整性
因此,在选择使用MyISAM作为存储引擎时,需要权衡其性能优势和数据完整性的要求,并在特定场景下进行综合考虑。对于要求更高的数据一致性和完整性的应用,通常建议使用InnoDB作为存储引擎。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值