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