mysql锁

行锁和表锁

我们都知道mysql有两种最常用的存储引擎:MyISAM和InnoDB,MyISAM只能支持表锁,InnoDB两种都能支持。

对系统性能的影响(高并发)

MyISAM: 执行读写sql时候,都会对表加锁。数据量大,并发高,对性能肯定有影响。

InnoDB: 行锁,性能比较优异.

那么我们只用InnoDB?

当然不是。举个栗子

1
select count(*) from table

MyISAM会瞬间返回而InnoDB则是一行一行的扫描,原因是MyISAM会存储总行数。我们再看下面的sql:

1
select count(*) from table where condition = ?

这个时候两种引擎的处理情况就一样了,condition命中索引走索引,没有命中全表扫。

结合两种引擎一起使用?

网上经常说select+insert(尾部插入)的业务用MyISAM引擎,从部署和操作的情况来说,不是很方便,还是建议统一使用InnoDB。尽量避免全表count,尽量命中索引去count。