innodb与myisam
引擎 | 事务 | 外键 | 锁 | 索引 |
---|---|---|---|---|
innodb | ![]() |
![]() |
行锁 | 聚簇 |
myisam | ![]() |
![]() |
表锁 | 非聚簇 |
版本变更 myisam:5.5以前默认engine innodb:5.5之后默认engine
表锁区别
- 表锁过程
- innodb的表锁是需要时间的,就好像一条没有索引的sql,全表扫描,检索到一条记录就锁一条,还没有检索到记录就不会锁,直到sql执行完成,统一释放,适用于update,delete,select(主动加锁的情况)这三种情况造成表锁的场景
- myisam的表锁是立即锁定,直到sql执行完成,释放锁
- 锁表之后区别
- 相同点
- update,delete,insert都会阻塞
- 不同点
- innodb表锁不会阻塞select
- myisam表锁会阻塞
性能比较
在myisam中大部分的sql语句,都是表锁,并发性没有innodb强