1.MySQL 中 myisam 与 innodb 的区别?
mysam 没有事务,innodb 有事务.
myisam 查询速度快,myisam 适合读多写少没有事务的业务场景。myisam 有空间函数。
mysam 的数据文件有三个,索引和数据是分开存储的。而 innodb 只有两个
mysam 支持数据文件压缩,innodb 支持独立表空间情况下对数据文件的清理操作。
mysam 没有外键
2.redo 和 undo 干什么用的?
undo 日志用来记录事务未提交前的数据修改值,可以用来 rollback.redo 日志用来记录事务提交后还没有写入 data file 前的值,可以用来恢复事务提交后的数据修改值。
3.hash 索引是什么,什么存储引擎支持? 有什么优缺点?
和 hashmap 类似,键值映射,通过键快速找到值。
innodb,memory 引擎支持
等值查找很快,不支持范围查询。不支持排序
4.btree 和 b+tree 有什么样的区别,对于范围检索来说,b+tree 好在哪里?
btree 可以在分支节点上存储索引值的同时存储数据值。
b+tree 在叶子节点上存储数据值,在分支节点上存储索引值。
b+ 优点:
数据都存储在叶子节点,通过指针相连,范围查询时直接检索叶子节点。不必遍历分支节点。
分支节点不存储数据,可以存储更多的索引,减少树的高度。
5.全文索引是怎么回事?
查询的数据字段都是索引,并且对索引表进行全表扫描。
6.MySQL 中 InnoDB 支持的四种事务隔离级别是什么? 有什么区别
未提交读,已提交读,可重复读,串行化
未提交读和已提交读的区别在于事务读取数据的时机不同,前者能读取其他事务未提交的数据修改,而后者不能,所以前者不能避免脏读的情况。
可重复读和前面两个的区别在于,它读取到的数据在事务未提交之前都是同一个值,避免了不可重复读的问题。
串行化和前面三者的区别在于,事务读取数据的时候直接锁表。解决了幻读的问题。
7.MYSQL 中的间隙锁是怎么回事,有几种方式产生间隙锁?
间隙锁是一个特殊的行锁,它不是锁住一行,而是一个范围的行。
范围删除,范围更新,锁表
8.能谈谈 mysql 实现读写分离的原理吗,和存储引擎有什么关系?
主节点数据更新后,从节点通过日志监测工具监测到主节点数据日志的变化,将变化写入中继文件,然后完成一次数据同步后,再将这些改变写入日志文件。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于