【数据库】MySQL(索引、数据结构、性能、锁、事务等)面试题
InnoDB和MyISAM的区别
- MyISAM只支持表级锁,InnoDB支持行级锁;
- MyISAM是非事务安全型的,InnoDB是事务安全型的;
- 如果执行大量的SELECT,MyISAM更好;如果执行大量的INSERT或UPDATE,InnoDB更好;
- 执行SELECT COUNT(*)时,MyISAM只要读出保存好的行数即可;InnoDB中不保存表的行数,需要扫描一遍整表。但是如果语句包含WHERE条件时,两种引擎的操作是一样的;
- MyISAM不支持外键,InnoDB支持。
InnoDB的索引结构
- 主键索引的叶子节点存储的是行数据的内容(聚簇索引)。
- 普通索引的叶子节点存储的是主键的值(非聚簇索引/二级索引)。
如果使用普通索引进行查询,会先通过普通索引查找到记录的主键,然后再根据主键索引树查找到对应的记录行,这个过程称为回表。
InnoDB如何保证持久性和原子性
redo-log保证持久性,undo-log保证原子性。
InnoDB如何使用内存
因为CPU速度和磁盘速度差距很大,为了提高效率,设立缓冲池。
缓冲池大小直接影响数据库性能,可用过innodb_buffer_pool_size
设置。
缓冲池数据页类型主要包括:索引页、数据页、u