Mysql
MySQL:軟刪除文章喜歡
我在我的一個項目中為文章實現了類似/不喜歡的功能。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
表中的關鍵查詢。