当我使用“语句”二进制日志和非唯一索引时,mysql 将使用“更改缓冲区”避免从磁盘读取。但是如果将binlog格式设置为“row”,binlog需要该行的所有列,所以mysql必须从磁盘读取。那么在这种情况下,剂量“change buffer”是无效的吗?
问问题
73 次
1 回答
1
基于mysql 文档:
更改缓冲区是一种特殊的数据结构,当这些页面不在缓冲池中时,它会缓存对 二级索引页面的更改。可能由INSERT、UPDATE 或 DELETE 操作 (DML) 导致的缓冲更改稍后会在其他读取操作将页面加载到缓冲池中时合并。
该文档已经非常清楚地说明了change buffer
可以用于non-unique secondary index
.
回到行格式的binlog,不会影响change buffer
. 因为 for insert
, update
, and delete
, 虽然binlog
需要行中的所有列,但这些数据可以从集群索引中获取,所有非唯一索引仍然可以从change buffer
.
实施:
change buffer
用于避免过多的随机磁盘读取。redo log
用于避免过多的随机磁盘写入。
于 2020-08-10T16:26:06.407 回答