1.mysql原子性和持久性怎么保证
原子性:是基于undo log回滚实现,undolog他会记录行修改,当不成功时会回滚。
持久性:是基于redo log实现,在事务提交前,先把修改写进日志,他不是针对行数据,而是针对页数据,当数据崩溃时,通过redo log实现。
2.innodb和myisam的区别
innodb支持行级锁,myisam支持表级锁
innodb支持事务,myisam不支持事务
innodb支持mvcc(多版本并发控制),myisam不支持
innodb支持全文索引,myisam不支持
innodb支持外键,myisam不支持
mvcc:就是解决可重复读下的脏读和不可重复读。
3.索引分类:
普通索引:针对数据库表创建的索引。
唯一索引:跟普通索引相似,当时索引的值必须唯一,允许有空值
主键索引:索引的值的必须唯一,不许有空值
组合索引:将数据组中多个字段进行组合
全文索引:全文索引的类型为fulltext,全文索引可以在varchar、char、text类型的列上创建。
4.innodb底层的数据结构
innodb底层的数据结果是b+树,每个叶子节点存储信息,叶子节点中间有指针指向下一个数据节点。
5.为啥用b+树而不是b树,
因为b树在非叶子节点也存在数据,会占用大量内存空间,当表数据量大时,树的层次会加深,影响查询速率,
使用b+树,所有数据都在叶子节点,非叶子节点可以存储大量索引,可以减少io次数。而且b+树有指针指向下一数据(形成链表),在范围查询时会特别方便。所有数据都在叶子节点,查询稳定。