2014-02-17 74 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來獲得結果,並緩存它們而不是每次都進行計數?

(也許每天壓縮表格一次?)

相關問題