继续回答星球水友提问:
沈老师,MyISAM只支持表锁,但网上文章却说,在并发插入量比较大的时候,比较适合使用MyISAM,这矛盾吗?
这个问题,涉及MySQL表锁的一些细节,借着这个问题,系统性说下表锁的“所以然”。
画外音:网上不少文章只说结论,不说为什么,容易让人蒙圈。
MySQL表锁知识系统性梳理。
哪些存储引擎使用表锁?
MySQL,除InnoDB支持行锁外,MySQL的其他存储引擎均只使用表锁,例如:MyISAM, MEMORY, MERGE等。
表锁有什么好处?
(1)表锁占用内存少很多,行锁的数量与行记录数相关,非常耗内存;
(2)如果业务经常读写表中很大一部分数据时,表锁会更快,因为此时只涉及一个锁,而不是同时管理N多个锁;
(3)如果业务经常使用group by,表锁会更快,原因同(2);
画外音:这样的一些场景,使用MyISAM比InnoDB更优。
表锁是怎么运作的?
和其他临界资源的读写锁类似。