一、索引原理
二叉树
缺点 如果每次写入的数据总比前次大时,则变为链表了
- 红黑树
缺点 当数据时大,查询层级大
- hash表
不适合范围查询,适合精准查询
- B树
非叶节点也存放数据,降低了每个非叶节点存放数据的数量
叶节点无指针,在进行范围查询时,需要跨非叶节点查询,效率低
- B+树
- 非叶节只存放索引,不存放数据,因此可以存放更多的索引数据
- 叶节点存在双向指针可快速进行范围查询
问:为什么官方建议使用自增长主键作为索引。
结合B+Tree的特点,自增主键是连续的,在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分。并且能减少数据的移动,每次插入都是插入到最后。总之就是减少分裂和移动的频率。
mysql默认存储引擎innodb只显式支持B-Tree( 从技术上来说是B+Tree)索引,对于频繁访问的表,innodb会透明建立自适应hash索引,即在B树索引基础上建立hash索引,可以显著提高查找效率,对于客户端是透明的,不可控制的,隐式的。
二、主从架构
MySQL
复制模式主要采用推送数据模式,根据推送是否返回响应可分为异步同步与半同步模式:
- 异步同步
只发送日志到slave,不确保日志一定能被接受效率高,但数据完整性不可靠。
- 半同步
发送日志到slave,并取得replaylog响应,在返回响应之前,master处于阻塞状态
架构
一主一从
一主多从
双主
分库,数据不能一样
级联同步
环形多主
https://www.mycookies.cn/mysql
中间件
atlas 中心代理可以实现自动读写分离
https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md
Gaea是小米中国区电商研发部研发的基于mysql协议的数据库中间件