InnoDB知识点整理

1.InnoDB支持事务,外键,行级锁,索引和数据存到一起,不保存表的具体行数,count时需要全表扫描,此时会锁表,删除数据的时候一条一条的删除,即使是删除表中所有的数据,不支持全文索引。

2.InnoDB在select和insert性能上不如myisam

3.InnoDB除了存自定义的列之外,还存了一个事务id和回滚指针列,如果表中没有主键,并且也没有not null 的unique,那么Innodb会增加一个rowid列作为主键(6个字节)

4.InnoDB的数据是按行进行存放,主键索引(聚集索引)是一个B+Tree,基于聚集索引的特点,InnoDB的主键索引的叶子节点保存了整行数据,非叶子节点保存了主键,辅助索引的叶子节点中保存的是主键,如果通过辅助索引检索数据,是先通过辅助索引找到主键,然后再查主键索引,找到数据。

5.InnoDB的锁级别是行锁,注意,InnoDB的行锁是通过给索引项加锁来实现的,InnoDB行锁分为3中形式,简单了解,一种是给索引项加锁,一种是对索引项的间隙,进行加锁,第三种就是对记录和前面的间隙进行加锁。

     因为InnoDB的行锁是通过索引项来实现的,所以,如果不通过索引检索数据,那么Innodb将对表中所有的记录进行加锁,也就是表锁。(1)不通过索引条件查询的时候,会锁定表中的所有记录(2)如果索引的值相同,那么会锁定两行数据,例如id是索引,存在这样的数据{id:1, name:1} {id:1, name:4} 如果查询条件是id=1 and name=4  那么会锁定id=1的所有记录,从而会出现锁冲突的现象。(3)当表中由多个索引的时候,不同事务使用不同的索引,不论是什么索引,都会使用行锁对数据进行加锁。(4)即便是查询条件中有索引字段,但是如果执行计划没有使用这个索引,还是没用,所以分析锁冲突的时候别忘记了执行计划。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章