【发布时间】:2022-01-02 13:54:30
【问题描述】:
- 在像“lastUpdatedOn”这样快速变化的列上添加索引值得吗?
- 如何计算权衡?
- 谁能给我指出有关何时以及如何的官方文档 MySQL 会在行插入和索引列更新时重新索引。
【问题讨论】:
【问题讨论】:
是否有一个包含“快速变化的列”的索引是一个权衡。
UPDATE 需要删除索引中的一个条目并在索引中的其他位置添加一个新条目。
另一方面,索引可能由于索引而大大加快。
请提供一个具体的例子,以便我们进一步讨论权衡。
因此维护常规的非UNIQUE 索引(与FULLTEXT 和SPATIAL 相对):
buffer_pool 中有一个“更改缓冲区”(qv),用于维护尚未写入磁盘的索引更新。
当出现DELETE 时,会在更改缓冲区中添加一个条目,表示需要删除索引条目。
对于UPDATE,两个条目可能需要放入CB。
当SELECT 使用这样的索引时,它会检查索引的CB 和真实的磁盘BTree。该 BTree 被缓存(逐块)在 buffer_pool 中。 (一个块为 16KB,可能包含数百个条目。)
CB“在后台”或“根据需要”刷新到磁盘。这包括获取一个索引块(除非已经缓存),更新一些条目(删除和/或添加),然后写回磁盘。读取和写入都缓存在 buffer_pool 中,因此任何一个都可能是物理 I/O。
MySQL 不会“重建”常规索引(“reindex”),除非通过某些 ALTERs 或 OPTIMIZE。也就是说,所有更改都是即时进行的。 CB的动作对用户是透明的。
【讨论】: