自己总结的一些…攒人品…没事翻着提醒用,怕误人子弟,没有怎么写答案…
1.数据库
1.1 基础SQL
1.1.1 左链接,右链接,内链接
1.2 MySQL引擎
1.2.1 innodb和myisam的区别,以及各自的优点
Innodb 支持事务,行锁
1.2.2 事务,数据隔离级别
1.原子性,持久性,隔离性,一致性
2.事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommetted读未提交 | 可能 | 可能 | 可能 |
Read committed读提交 | 不可能 | 可能 | 可能 |
Repeatable read重复度 | 不可能 | 不可能 | 可能 |
Serializable | 不可能 | 不可能 | 不可能 |
1.2.3 相关数据结构
1.B+树和B树混合实现,部分日志采用B树
2.B树的特点为什么用B+树不用红黑树
1.一个节点,可以存储多个关键字和多个子树指针
2.一个m阶B树,除了跟节点,非叶子节点必有[m/2,m]个子树
3.跟节点最多有两个子树
4.查找二叉树,越靠前的子树越少,
二者增删查时间复杂读一样
但是数据库无法全部缓存需要I/O读写,降低I/O次数,选择使用"矮胖"的B+树
3.B+树特点,为什么用B+树不用B树
1.B+树说有结果放在叶子节点中,查找必须到达叶子节点才返回;
2.B+树每一个节点的关键字个数和紫薯指针个数相同。
3.B+树的每一个节点的关键字个数和紫薯指针个数相同。
问题:
1.B树不能定位数据行
2.无法处理范围查找
解决方式
1.a)数据行单独存储;节点中增加个字段,定位key对应数据的位置
B+树特点
1.B+树所有结果落在叶子节点。查找必须到叶子节点才返回。
2.B+树每个节点的关键字个数和紫薯指针个数相同。
3.B+树的非叶子节点的每个关键字对应一个指针,贵贱子是子树的Max/Min值
1.2 MySQL索引
1.3 MySQL缓存
1.一级缓存/二级缓存
一级缓存:sqlSession级别,默认开启
二级缓存:Mapper级别,可跨sqlSeesion
2.针对缓存优化
innodb_buffer_pool_size 最大缓冲区大小
一块内存区作为IO缓存池
youngSublist | oldSublist |
---|
向中间插入缓存快,从尾部淘汰(LRU)
当缓存命中率过低,考虑扩充缓存池大小,调整缓存池数量,较少内部对缓存池数据结构的争用。
1.4 分布式
1.4.1 主键唯一
1.不同开始值,相同步长
2.UUID
3.snowflake 算法
1.4.2 MVCC
版本控制