2014-02-17 53 views
1

我正在VPS上运行论坛,运行Percona DB,PHP 5.5.8,操作码缓存等等,它都是非常快速的。在MySQL数据库中增加计数器的最快方法

我也在运行New Relic(是的,我有T恤)。

当我调整应用程序时,优化查询,论坛正在向数据库发送任何查询在我耗时的列表顶部。

现在,我使用的最耗时的查询,因为它是最常用的查询是每个主题的简单命中计数器。

所以查询是:

UPDATE topics SET num_views = num_views + 1 WHERE id_topic = ? 

我想不出来执行此,或者任何其它各种方式可能是更快,为什么一个简单的方法。

有没有写这个查询的方法,甚至更快,或者我可以添加到字段以帮助速度的索引?

谢谢。

回答

1

假设id_topic被索引,你不会好转。我唯一的建议是看看这张桌子上的其他索引,并确保你没有包含num_views的冗余索引。这会降低此更新的更新速度。

例如,如果你有以下指标

  1. (some_column,NUM_VIEWS)
  2. (some_column,NUM_VIEWS,another_column)

指数#1将是多余的,只是增加了插入/更新开销

+0

嗨,谢谢。我不认为它可以做得更快,但我认为可能应用像LIMIT = 1(即使只有一个id_topic)可能会提高速度,如果内部使得它是“WHERE”子句花费更少的时间。 另外,您提到的索引让我看看索引,并且有8个索引,有些重复,并且没有任何id_topic字段!所以谢谢你为我发掘这个问题! :) –

+0

@ i-CONICA如果id_topic是一个唯一的索引(如主键),在哪里添加一个限制不会有帮助。如果它不是独一无二的,我会困惑你如何单独看待它。 – Ray

+0

是的,这是主键,再次感谢。 –

0

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

如何仅为每个页面添加一行而不是锁定并更新该行?

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

(也许每天压缩表格一次?)

相关问题