Mysql - 两种常见存储引擎的区别
存储引擎简介
存储引擎是对于数据库文件的一种存取机制(存取方式),如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。
查看Mysql有哪些存储引擎:
show engines;
Engine:存储引擎的名称
Support:MySql是否支持,YES代表支持,NO代表不支持
Comment:指对该引擎的备注
查看MySql的默认存储引擎:
show global variables like '%storage_engine';
两种常见存储引擎的相同:
1、InnoDB和MyISAM均使用B+Tree(查看原因)作为索引结构
2、WHERE条件都符合索引最左匹配原则
两种常见存储引擎的区别:
1、事务
InnoDb:支持事务,四种隔离级别
MYISAM:不支持事务,但每次查询都是原子的
2、查询性能
InnoDb: 较慢
MYISAM:较快(因为索引和数据分开存储,采用非聚集索引)
3、存储结构
InnoDb: 索引的数据域存储数据文件本身(主键索引采用聚集索引,非主键索引是非聚集索引)【表有两个文件:表结构文件、数据文件,没有索引文件】
MYISAM:数据和索引分开储存(均采用非聚集索引) 【表有三个文件:索引文件、表结构文件、数据文件】
4、移植性、备份、恢复
InnoDb:拷贝数据文件、mysqldump、binlog备份,在数据量达到几十G时就相对痛苦
MYISAM:数据以文件的形式存储,所以在跨平台的数据转移中会很方便,在备份和恢复时可以针对单独的表进行操作
5、锁
InnoDb: 有表级锁、行级(默认)锁
【InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。也就是说,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。】
MYISAM:只支持表级锁(即每次操作是对整个表加锁,因此并发访问受限)
6、是否支持主外键
InnoDb: 支持
MYISAM:不支持
7、是否支持全文索引
InnoDb: Mysql5.6版本之后支持
MYISAM:支持
8、是否存储表的总行数
InnoDb: 不存储(执行select count(*) from table时,需要全表扫描)
MYISAM:存储(用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快,注意不能加有任何WHERE条件)
9、使用场景
InnoDb:电商类(支持事务,安全性较高)
原因:读写频繁,请使用InnoDB。不知道如何选择时,就可以选择InnoDB,用以应对未来可能存在的复杂业务。
MYISAM:新闻类(比较适合一些查询业务)
原因:表中绝大多数都只是读查询(一般R/W > 100:1且update相对较少),可以考虑 MyISAM。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」