InnoDB存储引擎
引擎区别
索引和算法
锁的机制
关键特性
事务一:重做日志
事务二:undo log
异步复制和半同步复制
MySQL主从配置参数
GTID
MySQL操作手册
自增ID和UUID 对性能的影响
本文档使用 MrDoc 发布
-
+
首页
关键特性
## Insert Buffer ### 基本概念 通常来说数据库表的主键都是自增长的,这会带来一个好处,写入磁盘的时候的顺序的,不需要磁盘的随机访问,这会带来写入性能的提升。但是辅助索引就不一样了,它们通常来说都不是递增或递减的,因此在B+树叶子节点中的写入也不是顺序的,对磁盘的随机操作会使得插入性能的下降。 基于这个原因,InnoDB设计了Insert Buffer: > 对于辅助索引的插入或更新操作,不是每一次都直接写入到索引页中,而是先判断插入的辅助索引是否在缓冲池中(Insert Buffer),若在,则直接写入;若不在,则先写入到一个Insert Buffer中。数据库认为这个索引数据已经写入到叶子节点,但实际并没有,而是先放在缓存中,然后再按一定的规则将Insert Buffer与辅助索引的B+树进行合并。这时通常能将多个插入操作合并提交,这大大提高了对辅助索引的插入性能。 索引需要满足两个条件才能使用Insert Buffer: 1. 索引是辅助索引 2. 索引不是唯一的 辅助索引不能是唯一的,因为在插入Insert Buffer时,数据库并不会查找索引的B+树来判断插入记录的唯一性。如果去查找肯定又会触发磁盘的随机访问,从而导致Insert Buffer失去了意义。 ### 内部实现 Insert Buffer也是一棵B+树,而且全局只有一个,负责对所有表的辅助索引进行插入缓冲。这课B+树存放在共享表空间中。 ### 持久化机制 Insert Buffer何时写入到真正的辅助索引中呢?主要有三种情况: - 辅助索引页被读取到缓冲池时; > 比如执行 SELECT 操作时,会确认该辅助索引页是否有数据存在于Insert Buffer中,若有,则执行Merge Insert Buffer 操作。显然,对该页的多次操作会通过一次操作写入到了辅助索引页中,大大提高了性能。 - 当该辅助索引页可用空间不足时; - MasterThread 定时写入; ## 自适应哈希 对于InnoDB引擎,用户无法主动创建哈希索引
gaojian
2021年6月22日 22:37
分享文档
收藏文档
上一篇
下一篇
微信扫一扫
复制链接
手机扫一扫进行分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码