Mysql

MySQL:軟刪除文章喜歡

  • February 3, 2016

我在我的一個項目中為文章實現了類似/不喜歡的功能。like 表已標準化並有一列visible。架構如下:

Column      Type       Null    Default  Links to
id          int(11)     No           
user_id     int(11)     Yes     NULL    user  -> id      
post_id     int(11)     Yes     NULL    posts -> id      
visible     tinyint(1)  Yes     NULL         
created     datetime    No           
updated     datetime    No 

我目前正在做的是,當使用者喜歡文章時,我創建一條記錄,當他不喜歡它時,我只是將visible列設置為false。計數由post_id和計算visible = true。當使用者喜歡/不喜歡文章時,我這樣做是為了防止數據庫負載過大。

我的問題是我這麼早(沒有太多流量)考慮數據庫性能是偏執狂,還是這是最佳實踐之一,我應該繼續這樣做?

您應該考慮數據訪問頻率與數據更新頻率之間的平衡。

添加另一個條件SELECT來顯示您的內容可能會比在使用者不喜歡的罕見情況下刪除行產生更多負載。請注意,您將需要一個索引visible來有效地查詢它。

如果(post_id, user_id)是唯一的,則拋棄id並使該對成為PRIMARY KEY.

我特別建議這個順序,因為我假設這個查詢經常使用?

SELECT COUNT(*)
   FROM tbl
   WHERE post_id = ?
     AND visible;

通過讓 PK以開頭post_id您可以獲得“集群”的附加效率,從而在該表最終變得如此之大以至於無法再記憶體時大幅減少 I/O。

我選擇不以visible任何方式包含,因為 (1) 它混淆了 PK 的“唯一性”要求,以及 (2) 行在visible更改時必須“移動”。這將是一大堆成本。(好吧,也許這種行為很少見,不必在意。)

另請參閱我的索引食譜

如果您想進一步討論這個問題,請提供SHOW CREATE TABLE表中的關鍵查詢。

引用自:https://dba.stackexchange.com/questions/128037