BlogBlog
首页
  • Vue
  • TypeScript
  • React
  • Angular
  • Node.js
  • 小程序
  • Flutter
  • 数据产品
  • 大数据

    • Hadoop
    • Hive
    • Spark
  • MySQL
  • Redis
  • Java
  • Python
  • Golang
GitHub
首页
  • Vue
  • TypeScript
  • React
  • Angular
  • Node.js
  • 小程序
  • Flutter
  • 数据产品
  • 大数据

    • Hadoop
    • Hive
    • Spark
  • MySQL
  • Redis
  • Java
  • Python
  • Golang
GitHub

MySQL Change Buffer

changebuffer 为什么不针对聚簇索引

Change Buffer 不针对聚簇索引是因为聚簇索引的更新具有特殊性(直接影响数据页、更新频率低、即时性要求高), 且优化聚簇索引的写操作收益有限。

Change Buffer 的设计初衷是通过缓存辅助索引的写操作来减少随机 I/O,这与聚簇索引的更新模式不匹配。

因此,InnoDB 选择仅对辅助索引应用 Change Buffer 优化。

  • Change Buffer 优化的对象:仅对辅助索引的写操作。
  • 辅助索引写操作可批量合并: 比如短时间内对辅助索引进行多次插入操作,这些操作暂存于change buffer中,之后一次性写入磁盘。就是将多次写入转换成一次顺序写入。
  • 聚簇索引写操作难以批量优化: 聚簇索引的写操作通常是随机且分散的,尤其是当数据更新涉及不同的数据页时,难以像辅助索引那样通过缓存操作来合并随机 I/O。例如,插入一条新记录时,若聚簇索引为自增主键,虽然插入顺序相对固定,但更新数据页的操作依然复杂,无法通过 Change Buffer 有效减少 I/O 次数。
最近更新:: 2025/5/9 08:18
Contributors: alice