一、索引原理

  • 二叉树

缺点 如果每次写入的数据总比前次大时,则变为链表了

image-20210628113213472

  • 红黑树

缺点 当数据时大,查询层级大

image-20210628113229072

  • hash表

不适合范围查询,适合精准查询

  • B树
  • 非叶节点也存放数据,降低了每个非叶节点存放数据的数量

  • 叶节点无指针,在进行范围查询时,需要跨非叶节点查询,效率低

  • B+树
  • 非叶节只存放索引,不存放数据,因此可以存放更多的索引数据
  • 叶节点存在双向指针可快速进行范围查询

preview

preview

preview

问:为什么官方建议使用自增长主键作为索引。

结合B+Tree的特点,自增主键是连续的,在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分。并且能减少数据的移动,每次插入都是插入到最后。总之就是减少分裂和移动的频率。

mysql默认存储引擎innodb只显式支持B-Tree( 从技术上来说是B+Tree)索引,对于频繁访问的表,innodb会透明建立自适应hash索引,即在B树索引基础上建立hash索引,可以显著提高查找效率,对于客户端是透明的,不可控制的,隐式的。

二、主从架构

MySQL复制模式主要采用推送数据模式,根据推送是否返回响应可分为异步同步与半同步模式:

image-20210628105353861

  • 异步同步

只发送日志到slave,不确保日志一定能被接受效率高,但数据完整性不可靠。

  • 半同步

发送日志到slave,并取得replaylog响应,在返回响应之前,master处于阻塞状态

架构

  • 一主一从

  • 一主多从

  • 双主

分库,数据不能一样

  • 级联同步

  • 环形多主

https://www.mycookies.cn/mysql

中间件

atlas 中心代理可以实现自动读写分离

https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

Gaea是小米中国区电商研发部研发的基于mysql协议的数据库中间件

https://github.com/XiaoMi/Gaea/