在MySQL数据库中增加计数器的最快方法

在MySQL数据库中增加计数器的最快方法,mysql,percona,Mysql,Percona,我在VPS上运行一个论坛,运行Percona DB,PHP5.5.8,操作码缓存,等等,这一切都是以速度为导向的 我也在经营New Relic(是的,我有这件t恤) 当我调整应用程序时,优化论坛向DB提出的查询,以便查询我时间消耗列表顶部的任何查询 现在,我有过的最耗时的查询,因为它是最常用的,是每个主题的一个简单的点击计数器 因此,问题是: UPDATE topics SET num_views = num_views + 1 WHERE id_topic = ? 我想不出一个更简单的方法

我在VPS上运行一个论坛,运行Percona DB,PHP5.5.8,操作码缓存,等等,这一切都是以速度为导向的

我也在经营New Relic(是的,我有这件t恤)

当我调整应用程序时,优化论坛向DB提出的查询,以便查询我时间消耗列表顶部的任何查询

现在,我有过的最耗时的查询,因为它是最常用的,是每个主题的一个简单的点击计数器

因此,问题是:

UPDATE topics SET num_views = num_views + 1  WHERE id_topic = ?
我想不出一个更简单的方法来实现这一点,或者其他各种方法是否更快,以及为什么

有没有一种方法可以更快地编写此查询,或者可以向字段添加索引以提高速度


谢谢。

假设
id\u主题
已编入索引,您不会变得更好。我唯一的建议是查看此表上的其他索引,确保其中没有包含
num\u视图的冗余索引。这将降低此更新的更新速度

例如,如果您有以下索引

  • (某些列,数字视图)
  • (某些列、num视图、另一列)

  • 索引#1是无关的,只会增加插入/更新开销

    不确定这是否是一种改进,但您可以检查以下内容:

    对于表中的每个页面点击,只添加一行,而不是锁定和更新行,怎么样

    然后使用计数来获得结果,并缓存它们,而不是每次都进行计数


    (也许每天压缩一次桌子?

    嗨,谢谢。我不认为它可以更快,但我认为可能应用LIMIT=1之类的东西(即使只有一个id_主题)可能会提高它的速度,如果在内部这使得“WHERE”子句花费的时间更少。另外,你提到的索引让我看了一下索引,在id_主题字段中有8个索引,有些重复,有些没有!所以谢谢你帮我发现了这个问题!:)@i-CONICA如果id_主题是唯一索引(如主键),则在where之后添加限制将没有帮助。如果它不是独一无二的,我会对你是如何看待它感到困惑。