MySQL 的存储引擎是个蛮关键的模块,尤其是你在做表结构设计或者优化性能的时候,绕不过这个话题。InnoDB和MyISAM算是老熟人了,各有千秋,懂点内幕你会更有底气选对引擎。
InnoDB 的行级锁还挺香的,多个用户同时读写都不怎么打架,配合事务,数据完整性也更有保障。写电商后台、支付系统那种对一致性要求高的场景,用它就对了。
MyISAM 的表级锁就显得“憨厚”一些了,插入一条记录都得锁整张表,适合那种读多写少、不太在意事务的系统,比如内容管理后台或者小型数据展示页面。
两种引擎的文件结构也有点差别,像 MyISAM 会分成.frm
、.MYD
、.MYI
几个文件,文件丢了就挺麻烦。InnoDB 会把数据集中管理,维护起来稍微稳点。
顺便提一句,如果你想手动指定表用哪种引擎,只需要在建表语句里加个ENGINE = MYISAM
,比如:
CREATE TABLE tab20 (
haha CHAR(5),
xixi CHAR(5)
) ENGINE = MYISAM;
想看建表信息就跑下SHOW CREATE TABLE tab20;
。想要默认用哪种引擎,还可以在配置文件里设定default-storage-engine
,改完别忘了重启服务。
锁机制那块,MySQL 分得蛮细的,除了表锁、行锁,还有读锁、写锁。简单说,读锁不影响别人读,写锁就谁也别动。这些小细节,理解清楚了能帮你避掉不少性能坑。
如果你对锁机制还有点模糊,推荐你看看这篇《MySQL 全局锁、表级锁与行级锁机制解析》,讲得还挺到位。
哦对,InnoDB 优化、MyISAM 特性啥的,也有几篇不错的参考文章,想深入挖的可以瞅瞅:
如果你正好在调性能、查锁问题,或者想梳理 MySQL 存储引擎的原理逻辑,这份资料真的挺值得一看。