【问题标题】:Index on a rapidly changing column快速变化的列上的索引
【发布时间】:2022-01-02 13:54:30
【问题描述】:
  1. 在像“lastUpdatedOn”这样快速变化的列上添加索引值得吗?
  2. 如何计算权衡?
  3. 谁能给我指出有关何时以及如何的官方文档 MySQL 会在行插入和索引列更新时重新索引。

【问题讨论】:

    标签: mysql sql indexing


    【解决方案1】:

    是否有一个包含“快速变化的列”的索引一个权衡。

    UPDATE 需要删除索引中的一个条目并在索引中的其他位置添加一个新条目。

    另一方面,索引可能由于索引而大大加快。

    请提供一个具体的例子,以便我们进一步讨论权衡。

    因此维护常规的非UNIQUE 索引(与FULLTEXTSPATIAL 相对):

    buffer_pool 中有一个“更改缓冲区”(qv),用于维护尚未写入磁盘的索引更新。

    当出现DELETE 时,会在更改缓冲区中添加一个条目,表示需要删除索引条目。

    对于UPDATE,两个条目可能需要放入CB。

    SELECT 使用这样的索引时,它会检查索引的CB 和真实的磁盘BTree。该 BTree 被缓存(逐块)在 buffer_pool 中。 (一个块为 16KB,可能包含数百个条目。)

    CB“在后台”或“根据需要”刷新到磁盘。这包括获取一个索引块(除非已经缓存),更新一些条目(删除和/或添加),然后写回磁盘。读取和写入都缓存在 buffer_pool 中,因此任何一个都可能是物理 I/O。

    MySQL 不会“重建”常规索引(“reindex”),除非通过某些 ALTERsOPTIMIZE。也就是说,所有更改都是即时进行的。 CB的动作对用户是透明的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多