引擎
常考的主要分为InnoDB,MyISAM
# 主要区别
# InnoDB引擎的4大特性
- 插入缓冲(insert buffer)
- 二次写(double write)
- 自适应哈希索引(ahi)
- 预读(read ahead)
深入参考:InnoDB四大特性 - 知乎 (zhihu.com) (opens new window)
# InnoDB行级锁是基于什么样的机制实现
InnoDB行锁是通过给索引上的索引项加锁来实现的,InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
特点
- 在不通过索引查询时,会使用表锁,而不是行锁
- 因为针对索引加的锁,不是针对记录加的锁,所以即使是访问不同行的记录,如果使用了相同的索引键,也是会出现锁冲突的。
- 当有多个索引时,不同的事务可以使用不同的索引锁定不同的行。另外,不论是使用主键索引、唯一索引或普通索引,InnoDB都会使用行锁来对数据加锁。
- 即便在条件中使用了索引字段,但具体是否使用索引来检索数据是由MySQL通过判断不同执行计划的代价来决定的,如果MySQL认为全表扫描效率更高,比如对一些很小的表,它就不会使用索引,这种情况下InnoDB将使用表锁,而不是行锁。
# InnoDB行级锁的类型
InnoDB的行级锁定同样分为两种类型:共享锁和排他锁,而在锁定机制的实现过程中为了让行级锁定和表级锁定共存,InnoDB也同样使用了 意向锁(表级锁定) 的概念,也就有了意向共享锁和意向排他锁这两种。
深入参考:了解Mysql的行级锁——《深究Mysql锁》 - SegmentFault 思否 (opens new window)
编辑 (opens new window)
上次更新: 2021/04/01, 17:14:55