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 能能减少对 磁盘数据,随机更新次数。