prader6

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

posted on 2021-07-02 11:33  prader6  阅读(92)  评论(0编辑  收藏  举报

导航