mysql change buffer
innoDb
一 普通索引和唯一索引的查询过程: select id from T where k=5。
1 根据b+树,普通索引在查询到第一条记录之后,会继续查询下一条记录,只到碰到第一个 k=5 的记录。
2 唯一索引,会直接返回 查询到的第一条k= 5的记录。
虽然普通索引多 一次查询,但是对于性能来说,这两者差不多。
二 普通索引和唯一索引对更新性能的影响。
1 在保证数据一致性的情况下,innoDb 数据更新的过程: 如果数据在内存中,直接进行更新,如果数据没有在内存中,就先把更新信息记录在 change buffer 中,等下次读取这条数据的时候,进行更新操作或者,后台线程自动进行更新操作。
2 比如插入(4,400),这条记录,唯一索引,要先去判断数据是否存在,因此要把数据读取到内存中,再进行判断插 入,数据进入内存就可以直接进行更新数据了,因此没必要再更新change buffer 了。
因此 change buffer 和普通索引一起使用,再更新比较多,而读取比较少(因为再读取change buffer 中做出改变的数据 的时候,会直接把数据更新同步到磁盘)的场景 性能更高。比如账单,日志等。
3 change buffer 和redo log 的区别。
change buffer 是再buffer pool 中的,数据的修改再 changeBuffer 中记录一份, 多分这种记录一起写入 redo log 中。redo log 分为两部分,一部分是内存中的redo log buffer,另一部分是 磁盘山的 redo log file.
因此change buffer 能减少对磁盘随机读取的次数,redo log 能能减少对 磁盘数据,随机更新次数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)