2011-09-16 32 views
0

我有一張表作爲ID,標題,內容等職位,我只是添加了一列作爲計數器。這是一個簡單的訪問計數器,因爲每次都會更新爲$ i + 1。在這種方法中,我在讀取行之後(在一個mysql會話中)更新了每次訪問的表。在mysql中爲統計計數器創建一個單獨的表?

將計數器作爲另一張桌子與ID作爲外鍵連接的桌子分開是個好主意嗎?在這種方法中,更新更輕的表更快,但每次需要閱讀兩個表(顯示帖子及其統計信息)。

+2

我會建議不要分開,但這只是直覺。信息緊密耦合,保持在同一個表中。 – captainclam

+0

+1 @captainclam。如果這只是一列2列,並且這是1:1 rel,那麼無需特別分開。把它放在同一張桌子上。 – Icarus

回答

1

所以,我的答案是取決於你想要做什麼。我會給你一些MySQL背景信息的背後,所以你可以決定何時有意義而不創建一個櫃檯表。

MySQL有不同的表引擎。當你創建一個新表時,你需要指定使用哪個引擎,更常見的是MyISAMInnodb。 MyISAM在做選擇時非常好,速度也很快,Innodb在插入時非常快速。兩者之間還存在其他差異,但很好理解您選擇的引擎非常重要。

基於上述情況,如果您有一張通常被讀取且有大量行的表,將該表保存爲MyISAM並使用Innodb創建一個獨立的計數器表可以使其不斷更新。如果你正在實現緩存,這是這個模型更好的工作的另一個原因,因爲你每次更新計數器都不會清除你的表數據的緩存,因爲你將更新另一個表上的計數器。

現在,有人可能會爭辯說,你應該使用Innodb,因爲它有更多的好處,但有複製策略,可以讓你充分利用兩個世界。

我希望這給你一個大概的理解,這樣你就可以深入挖掘並找到答案。更多信息在:http://www.mysqlperformanceblog.com/2007/07/01/implementing-efficient-counters-with-mysql/

+0

我通常禁用Innodb來保存RAM;但將MyISAM和Innodb用於不同類型的性能是一個絕妙的主意。感謝您提供豐富的答案。 – Googlebot