课程名称:笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机
课程章节:第8章 存储、缓存、搜索高级篇
主讲老师:求老仙
课程内容:
第8章 存储、缓存、搜索高级篇
课程收获:
1,索引查询的过程?
索引分为:聚集索引和非聚集索引(二级索引,辅助索引。)
例如:
查询张三,张三是个二级索引,先通过二级索引(key-id),找到id
通过id再去查询行号,找到磁盘上行的位置
问题2)B树和B+树的区别?
-
B+树的叶子节点链表相连
-
聚集索引B+树的叶子节点存储真正的数据,非叶子节点存储索引
问题3)什么场景用hash索引,为什么不用Hash存储索引?
HashTable适合存储,随机的索引,也就是说,不在乎数据的顺序,是随机访问的数据适合使用hash存储。
-
mysql一般不用hash做索引,因为hash要求所有的数据必须都在内存中,这样非常耗费内存
-
Key-value型的数据,有很多,不应该用mysql的hash索引,可以用redis的key-value也可以实现。
-
Innodb某些字段访问频率过高,会生成一个hash结构,内存中会有一个LRU缓存。
问题4)为什么使用B+树的主要原因?
主要原因是减少io次数
减少磁盘扫描
注意点:
1,无符号整数最大,大概是40亿
问题5)分库分表?垂直拆分和水平拆分
垂直拆分是业务导向,是根据业务来进行拆分的
垂直:从中间切开,或者不从中间拆开
垂直拆库:10张表,分成两个库,一个库5张表
垂直拆表:一张表10个字段,分成两个表,一个表5个字段
水平:横着从中间切开,或者不从中间切开
水平拆表:还是一个数据库,原来的一个表的数据存储,到多张表
没有水平拆库
水平拆表要保证id的唯一 : 雪花算法
垂直分库又水平分表,需要保证在分布式的情况下,保证id的唯一,需要原子操作,就需要使用shardingSphere工具
雪花算法: