行锁和表锁
我们都知道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。