索引一个不断变化的字段是不是合理,或者不断写入会降低性能?

Posted

技术标签:

【中文标题】索引一个不断变化的字段是不是合理,或者不断写入会降低性能?【英文标题】:Is it plausible to index a field that is constantly changing, or will the constant writing diminish performance?索引一个不断变化的字段是否合理,或者不断写入会降低性能? 【发布时间】:2011-03-02 09:23:18 【问题描述】:

我目前正在为我的一个 mysql 表编制索引,并且已经到了需要专家就如何进行的建议的地步。

该表的结构类似于以下内容:

ProductID - INT - UNSIGNED - NOT NULL - AUTO INCREMENT - PRIMARY KEY
ProductName - VARCHAR(64) - NOT NULL
ProductViews - INT - UNSIGNED - NOT NULL

WHERE 子句中使用的唯一字段是 ProductID。 ORDER BY 中使用的唯一字段是 ProductViews。

该表相当大,因此典型的查询(当连接到另一个表时)可能需要一些时间。 在典型查询上运行 EXPLAIN 表明,由于 ProductViews 字段,MySQL 正在显示“Extra: Using where; Using filesort”

我想索引 ProductViews 以摆脱文件排序,但是每次访问页面时字段中的值都会增加 1。

索引一个不断变化的字段是否合理,或者不断写入会降低性能?在这种情况下,我真的无能为力,不得不忍受文件排序问题吗?

【问题讨论】:

【参考方案1】:

您是在问索引的收益是否超过成本。我会说文件排序非常昂贵,值得在这里使用索引。

但唯一真正的答案可以通过测量找到。设置标准(例如网页加载速度)并在使用和不使用索引的情况下对其进行衡量。

【讨论】:

正如您所说,很难得出一个明确的答案。在这种情况下,我发现添加索引会导致变化,但并不重要。我还没有决定如何继续,但我觉得我不应该索引那个字段,因为结果集很可能会被缓存(使用 memcache)。

以上是关于索引一个不断变化的字段是不是合理,或者不断写入会降低性能?的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch实战(十五)-索引别名

Mongoose 不断为不再存在的旧字段创建索引

如何在集合视图中查找最后一个可见单元格的索引路径。但索引路径是随机的不断变化

c ++多线程同步与不断变化的资源量

PHP邮件不断给我未定义的索引,帮助?

Char ** 在递归添加时不断被覆盖